Struts2自定义标签——示例
自定義Button功能描述:
<tangs:button ?items="apple,orange,banana"/>
解析后為:
<input ?type="button" ?name="apple" ?value="apple" />
<input ?type="button" ?name="orange" ?value="orange" />
<input ?type="button" ?name="banana" ?value="banana" />
文件配置:
tangs.tld
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib><tlib-version>2.2.3</tlib-version><jsp-version>1.2</jsp-version><short-name>tangs</short-name><uri>/tangs</uri><display-name>"Tangs Tags"</display-name><tag><name>button</name><tag-class>com.gq.tag.button.ButtonTag</tag-class><body-content>empty</body-content><attribute><name>items</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag> </taglib>這里要注意的是:<rtexpvalue>true</rtexpvalue> 時候,可以使用 JSP 表達式rtexprvalue的全稱是 Run-time Expression Value, 它用于表示是否可以使用JSP表達式.
當在<attribute>標簽里指定<rtexprvalue>true</rtexprvalue>時, 表示該自定義標簽的某屬性的值可以直接指定或者通過動態計算指定,? example as follow:
<sql:query var="result" >
??? select * from mytable order by nameid
</sql:query>
<%request.setAttribute("nameid", "2"); %>
<myTag:cupSize cupSize="1" cupSizes="${result}"></myTag:cupSize>
<myTag:cupSize cupSize="${nameid}" cupSizes="${result}"></myTag:cupSize>
當在<attribute>標簽里指定<rtexprvalue>false</rtexprvalue>時, 表示該自定義標簽的某屬性的值只能直接指定,? example as follow:
<myTag:cupSize cupSize="1" cupSizes="${result}"></myTag:cupSize>
_________________________________________________________________________
ButtonTag.java
/** *創建日期 :2011-11-16 *創建用戶 :GongQiang *變更情況 : *文檔位置 $Archive:test_struct2/com.gq.tag.button/ButtonTag.java$ *最后變更 $Author: $ *變更日期 $Date: $ *當前版本 $Revision: $ * *Copyright (c) 2004 Sino-Japanese Engineering Corp, Inc. All Rights Reserved. */ package com.gq.tag.button;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.struts2.components.Component; import org.apache.struts2.views.jsp.ComponentTagSupport;import com.opensymphony.xwork2.util.ValueStack;public class ButtonTag extends ComponentTagSupport {private static final long serialVersionUID = 1L;private String items;public String getItems() {return items;}public void setItems(String items) {this.items = items;}/*** getBean 在類ComponentTagSupport中為抽象,子類必須實現*/@Overridepublic Component getBean(ValueStack valueStack, HttpServletRequest request, HttpServletResponse response) {return new ButtonService( valueStack );}@Overrideprotected void populateParams() {super.populateParams();ButtonService buttonService = (ButtonService) getComponent();buttonService.setItems( getItems() );} }_________________________________________________________________________
ButtonService.java
/** *創建日期 :2011-11-16 *創建用戶 :GongQiang *變更情況 : *文檔位置 $Archive:test_struct2/com.gq.tag.button/ButtonService.java$ *最后變更 $Author: $ *變更日期 $Date: $ *當前版本 $Revision: $ * *Copyright (c) 2004 Sino-Japanese Engineering Corp, Inc. All Rights Reserved. */ package com.gq.tag.button;import java.io.IOException; import java.io.Writer;import org.apache.struts2.components.Component;import com.opensymphony.xwork2.util.ValueStack;public class ButtonService extends Component {private String items;public String getItems() {return items;}public void setItems(String items) {this.items = items;}/*** Component 沒有默認構造器,子類必須指明構造器* * @param valueStack*/public ButtonService(ValueStack valueStack) {super(valueStack);}@Overridepublic boolean start(Writer writer) {String[] itemValues = getItemValues();//如下操作,僅僅顯示出itemValues 的buttonStringBuilder sb = new StringBuilder();for( String value : itemValues ){sb.append( "<input type=\"button\" name=\"" + value + "\" value=\"" + value + "\">" );}try {writer.write( sb.toString() );} catch (IOException e) {throw new RuntimeException( "Construct <tangs:button /> error" );}return super.start(writer);}private String[] getItemValues( ){if( items == null || items.trim().equals( "" ) ){return new String[]{};}// 直接給屬性items 賦值, <tangs:button items="apple,orange,banana"/>if( items.contains( "," ) ){ //假設必須是多個return items.split( "," );}// 通過JSP運行獲取值,<tangs:button items="fruits"/>else{return (String[])this.getStack().findValue( items ); //這樣寫,只支持struts2 的ongl語法}}}通過如上三個文件,tangs.tld、ButtonTag.java 和 ButtonService.java 的定義 <tangs:button />自定義標簽已經完成,下面演示使用:
struts.xml 配置文件中添加 ButtonTag:
<!-- 演示標簽 --><package name="tag" extends="struts-default" namespace="/tag"><action name="Tag" class="com.gq.action.TagTestAction"><result name="success">/tagTest/tags.jsp</result><interceptor-ref name="defaultStack"/></action><action name="ButtonTag" class="com.gq.tag.button.ButtonActionTest"><result name="success">/tagTest/buttonTag.jsp</result><interceptor-ref name="defaultStack"/></action></package>
JSP 頁面 buttonTag.jsp <%@ page language="java" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <%@taglib prefix="tangs" uri="/tangs" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>My JSP 'buttonTag.jsp' starting page</title></head><body>頁面直接給定屬性<br/><tangs:button items="apple,orange,banana"/><br/><br/>運行時獲取值<br/><tangs:button items="fruits"/></body> </html>
訪問頁面效果:
總結
以上是生活随笔為你收集整理的Struts2自定义标签——示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle表参数,Oracle 表的
- 下一篇: Extract Superclass(提