`
raozhiyong11
  • 浏览: 138931 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

Struts2.1 标签详细说明

阅读更多

 

 

   Struts 2.1 Tags

最近学习  Struts 2.1 Tags 做了些笔记,贴出来大家一起学习下,希望大家多多交流。

 

别的都不说了,我就贴代码,代码里注释比较详细,呵呵。
 

文件目录,如下:

 

 

 index.jsp 代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.rao.bean.Sex"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>My page</title>
  <s:head theme="xhtml"/>
  <sx:head parseContent="true"/>
</head>

  <body>
    Struts 2.1 Tags
    <br/>
    <br/>
    一、控制标签<br/><hr size="3" color="red">
    
     #、if /elseif/ else @用于逻辑判断<br/>
     <s:set name="bir" value="-12"></s:set>
     <s:if test="#bir>=180 || #bir<0">
     	你是何方妖怪?
     </s:if>
     <s:elseif test="#bir<=18 && #bir>=0">
     	未成年人不能进入!
     </s:elseif>
     <s:elseif test="#bir<=60 && #bir>=18">
     	您已经成年!
     </s:elseif>
     <s:else>
     	您已经老了!
     </s:else>
     <br/>--------------------------------------------------------------<br/>
	 #、append @用于将多个集合合并<br/>
	 <s:set name="appList1" value="{'111','222','333','444'}"></s:set>
	 <s:set name="appList2" value="{'aaa','bbb','ccc','ddd'}"></s:set>
	 <s:append var="newAppList">
	 	<s:param value="appList1"></s:param>
	 	<s:param value="appList2"></s:param>
	 </s:append>
	 <s:iterator value="#newAppList">
	 	<s:property/> | 
	 </s:iterator>
	  <br/>--------------------------------------------------------------<br/>
	 #、generator  <br/>
	 generator标签,该标签可以将指定字符串按指定分隔符分割成多个字串。生成的多个字串可以用iterator标签进行迭代输出。可以这么理解:generator标签将一个字符串转换成一个List集合。在该标签体内,整个临时生成的集合将为Valuestack的顶端,但一旦该标签结束,生成的集合将被移除Valuestack。generator标签有如下几个属性:
	<br/>
	1、count属性:指定生成集合中元素的总数。可选属性。<br/>
	
	2、val属性:必填属性,指定被解析的字符串。<br/>
	
	3、separator属性:这是一个必填属性,指定用于分割字符串的分隔符。<br/>
	
	4、converter属性:可选属性,指定一个转换器,转换器负责将生成的集合中的每个字符串转换成对象,通过这个转换器可以将一个含有分隔符的字符串解析成对象的集合。转换器必须一个继承org.apache.struts2.util.IteratorGenerator.Converter的对象。
	<br/>
	5、var属性,可选属性。如果指定了该属性,则将生成的集合保存在Stack Context中。如果不指定该属性,则将生成的集合放入ValueStack的顶端,该标签一结束,生成的集合就被移除。该属性也可替换成id。
	<br/>
	 <s:generator  val="'aaa,bbb,ccc,ddd'"  separator="," count="2">
	 	<s:iterator>
	 		<s:property/>
	 	</s:iterator>
	 </s:generator><br/>

	  <br/>--------------------------------------------------------------<br/>
	 #、iterator 用于迭代数据<br/>
	 <s:set name="iterList" value="{'aaa','bbb','ccc','ddd'}"></s:set>
	 <table border="1">
	 <tr>   
                <td>   索引   </td>   
                <td>   值   </td>   
                <td>   奇?   </td>   
                <td>   偶?    </td>   
                <td>   首?    </td>   
                <td>   尾?    </td>   
                <td>  当前迭代数量    </td>   
            </tr>   
	 
		<s:iterator value="{'aaa','bbb','ccc','ddd','eee','fff'}" begin="1" status="s">
			<tr bgcolor="<s:if test="#s.odd">pink</s:if>">
				<td><s:property value="#s.index"/></td>
				<td><s:property/></td>
				<td><s:property value="#s.even"/></td>
				<td><s:property value="#s.odd"/></td>
				<td><s:property value="#s.first"/></td>
				<td><s:property value="#s.last"/></td>
				<td><s:property value="#s.count"/></td>
			</tr>
		</s:iterator>	 	 
	 </table>
	 
	 
	  <br/>--------------------------------------------------------------<br/>
	 #、merge @和类似:用于将多个集合合并<br/>
	 <s:set name="merList1" value="{'111','222','333','444'}"></s:set>
	 <s:set name="merList2" value="{'aaa','bbb','ccc','ddd'}"></s:set>
	 <s:append var="newMerList">
	 	<s:param value="merList1"></s:param>
	 	<s:param value="merList2"></s:param>
	 </s:append>
	 <s:iterator value="#newMerList">
	 	<s:property/> | 
	 </s:iterator>
	  <br/>--------------------------------------------------------------<br/>
	 #、sort @用于排序<br/>
	 <s:bean var="myComparator" name="com.rao.comparator.MyComparator"></s:bean>
	 <s:sort comparator="#myComparator" source="{1,45,56,0,345,3}">
	 	<s:iterator>
	 		<s:property/>,
	 	</s:iterator>
	 </s:sort>
	  <br/>--------------------------------------------------------------<br/>
	 #、subset @用户截取集合中的子集;   注:decider:可选属性,指定由开发者自己决定是否选中该元素.  
	 <br/>
	 <s:set name="subList" value="{'@@@','***','&&&','###'}"></s:set>
	 <s:subset source="#subList" start="1" count="2">
	 	<s:iterator>
	 		<s:property/>,
	 	</s:iterator>
	 </s:subset>
	  <br/>--------------------------------------------------------------<br/>
       二、数据标签<br/>
      <hr size="3" color="red">
	#、action @用于导入一个Action<br/>
	使用action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.如果指定了executeResult参数的属性值为true,该标签会把Action的处理结果(视图资源)包含到本页面中. 使用action标签指定属性有:
	<br/>
	id: 可选属性,作为该Action的引用ID   <br/> 
   
	name:必选属性,指定调用Action    <br/>
	   
	namespace:可选属性,指定该标签调用Action所属namespace    <br/>
	   
	executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false,不包含.    <br/>
	   
	ignoreContextParam:可选参数,指定该页面的请求参数是否需要传入调用的Action中,默认值是false,即传入参数.<br/>
	
	s:param是以request方式的值的,而不是以参数传值,所以request.getParameter("")会获取不到值,通过request.getAttribute("")方式可以获取<br/>

	<s:action name="tagsAction1" ignoreContextParams="true" executeResult="true" namespace="/com/rao">
		<s:param name="userName" value="'三毛'"></s:param>
	</s:action>
	
	  <br/>--------------------------------------------------------------<br/>
	#、bean @用于导入一个javaBean,相当于:jsp:useBean 标签<br/>
	<s:bean name="com.rao.bean.UserBean" var="user">
		<s:param name="userId" value="1001"></s:param>
		<s:param name="userName" value="'张三'"></s:param>
	</s:bean>
	userId:<s:property value="#user.userId"/><br>
	userName:<s:property value="#user.userName"/>
	  <br/>--------------------------------------------------------------<br/>
	#、date @用于格式化日期<br/>
	<s:set name="dt" value="new java.util.Date()"></s:set>
	当期系统时间是:<s:date name="dt" format="yyyy-MM-dd HH:ss:mm"/>
	  <br/>--------------------------------------------------------------<br/>
	#、debug @用于调试程序,让开发人员一目了然的知道当前请求、值栈、栈中的各项参数<br/>
	<s:debug/>
	  <br/>--------------------------------------------------------------<br/>
	#、i18n @用于访问国际化资源文件的内容<br/>
				1.默认访问全局范围内的资源文件;
				<br>
				<s:text name="welcome">
					<s:param>三毛</s:param>
					<s:param>学习</s:param>
				</s:text>
		
				<hr>
				2.访问包范围内的资源文件;
				<br>
				<s:i18n name="com/rao/action/package">
					<s:text name="welcome">
						<s:param>三毛</s:param>
						<s:param>学习</s:param>
					</s:text>
				</s:i18n>
				<hr>
				3.访问Action范围内的资源文件;
				<br>
				<s:i18n name="com/rao/action/GlobalNativeAction">
					<s:text name="welcome">
						<s:param>三毛</s:param>
						<s:param>学习</s:param>
					</s:text>
				</s:i18n>
	  <br/>--------------------------------------------------------------<br/>
	#、include @用于导入一个jsp文件,等同于:jsp:include标签<br/>
	<s:include value="success.jsp"></s:include>
	  <br/>--------------------------------------------------------------<br/>
	#、param @用于给指定参数设置值<br/>
	<s:bean name="com.rao.bean.UserBean" var="user">
		<s:param name="userId" value="1001"></s:param>
		<s:param name="userName" value="'张三'"></s:param>
	</s:bean>
	userId:<s:property value="#user.userId"/><br>
	userName:<s:property value="#user.userName"/>
	  <br/>--------------------------------------------------------------<br/>
	#、property @输出结果,很像EL表达式,但是可以依托于OGNL表带是很强大<br/>
	同上
	  <br/>--------------------------------------------------------------<br/>
	#、push @该标签可以把程序员在ActionContext中引用的对像压入valuestack中,为以后访问对象提供了方便<br/>
	<s:push value="#request.user"><s:property value="userName"/></s:push>
	  <br/>--------------------------------------------------------------<br/>
	#、set @用户声明对象或属性<br/>
	<s:set name="uName" value="#request.user.userName"></s:set>
	<s:property value="#uName"/>,你好啊!
	  <br/>--------------------------------------------------------------<br/>
	#、text @用户获取国际化资源文件的内容<br/>
	请参考 il8n标签
	  <br/>--------------------------------------------------------------<br/>
	#、url @用于组拼一个请求路径<br/>
	<s:url var="url1" action="MyAction" method="add">
		<s:param name="id" value="%{23}"></s:param>
		<s:param name="name" value="%{'tom'}"></s:param>
	</s:url>
	<s:property value="#url1"/>
	<br/>
	注意:<br/>   
        <s:set name="myurl" value="'http://www.baidu.com'"></s:set>   
        value以字符处理:   <s:url value="#myurl"></s:url><br>   
        value明确指定以ognl表达式处理:    <s:url value="%{#myurl}"></s:url>   
	
	  <br/>--------------------------------------------------------------<br/>
    
       三、UI标签<br/>
    <hr size="3" color="red">
    <s:form>
    #、checkboxlist @复选框列表<br>
   		 1> .list 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>   
        name:checkboxlist的名字<br>   
        list:checkboxlist要显示的列表<br>   
        value:checkboxlist默认被选中的选项,checked=checked<br>   
        <s:checkboxlist theme="simple" name="checkbox1" list="{'上网','看书','爬山','游泳','唱歌'}" value="{'上网','看书'}" ></s:checkboxlist>   
        <br>   
       
        2> .Map 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>   
        name:checkboxlist的名字<br>   
        list:checkboxlist要显示的列表<br>   
        listKey:checkbox 的value的值<br>   
        listValue:checkbox 的lablel(显示的值)<br>   
        value:checkboxlist默认被选中的选项,checked=checked<br>   
        <s:checkboxlist theme="simple" name="checkbox2" list="#{1:'上网',2:'看书',3:'爬山',4:'游泳',5:'唱歌'}" listKey="key" listValue="value" value="{1,2,5}" ></s:checkboxlist>   
  
         <br/>--------------------------------------------------------------<br/>
     #、combobox <br/>
    <s:combobox theme="simple" label="选择你喜欢的颜色" name="colorNames"  headerValue="------请选择------" headerKey="1"  list="{'红','橙','黄','绿','青','蓝','紫'}" /> 
	<br/>--------------------------------------------------------------<br/>
     #、radio @单选框<br/> 
    	 <%   
            Sex sex1 = new Sex(1,"男");    
            Sex sex2 = new Sex(2,"女");   
            List<Sex> list = new ArrayList<Sex>();    
            list.add(sex1);   
            list.add(sex2);   
            request.setAttribute("sexs",list);    
        %>   
                      这个与checkboxlist差不多;<br>   
        1>.如果集合为javabean:<s:radio theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"></s:radio><br>   
        2>.如果集合为list:<s:radio theme="simple" name="sexList" list="{'男','女'}"></s:radio><br>   
        3>.如果集合为map:<s:radio theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:radio><br>   
        <hr>   
     <br/>--------------------------------------------------------------<br/>
     #、select @下拉列表框<br/>  
     	这个与s:checkboxlist差不多;<br>   
        1>.如果集合为javabean:<s:select theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"></s:select><br>   
        2>.如果集合为list:<s:select theme="simple" name="sexList" list="{'男','女'}"></s:select><br>   
        3>.如果集合为map:<s:select theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:select><br>   
     
     <br/>--------------------------------------------------------------<br/>
     #、doubleselect @级联菜单 <br/>
    <!--   可以用直接指定,当然也可以跟数据库绑定的 -->
     <s:set name="proviList" value="{'江西省','湖北省'}"></s:set>
     <s:set name="jxList" value="{'南昌市','赣州市','九江市','上饶市','鹰潭市'}"></s:set>
     <s:set name="hbList" value="{'武汉市','恩施市','十堰市','荆州市','襄樊市'}"></s:set>
     <s:doubleselect theme="simple"  name="provi" doubleList="top=='江西省' ? #jxList : #hbList" list="#proviList" doubleName="city"></s:doubleselect>
     <br/>--------------------------------------------------------------<br/>
     #、optiontransferselect <br/>
     <s:optiontransferselect theme="simple" label="change" name="abc" doubleList="{'111','222','333','444'}" list="{'aaa','bbb','ccc','ddd'}" doubleName="number"></s:optiontransferselect>
     <br/>--------------------------------------------------------------<br/>
     #、updownselect @可上下选择的select <br/>
     <s:updownselect label="selectCity" emptyOption="true" name="selectCity" list="#jxList" headerValue="-Please Select The City-" headerKey="-1"></s:updownselect>
	  <br/>--------------------------------------------------------------<br/>
	 #、sx:datetimepicker @日期选择控件 <br/>
	 使用步骤:声明:我这里用的是strut 2.1.8.1,在struts2.0的版本中可能有所不同;<br/>
	 		  1.导入struts2-dojo-plugin-2.1.8.1.jar DoJo 插件包;<br/>
	 		  2. 导入标签:<%--@ taglib prefix="sx" uri="/struts-dojo-tags"--%>;<br/>
	 		  3.在需要使用的页面中的head标签之间加上<%-- <sx:head parseContent="true"/> --%>;<br/>
	 <sx:datetimepicker label="birthday" name="bir" value="#dt"></sx:datetimepicker>
	  <br/>--------------------------------------------------------------<br/>
     #、sx:tabbedpanel @选项卡控件 <br/>
   	  声明:这个标签代码转至:http://blog.sina.com.cn/s/blog_6145ed810100ecud.html,版权归作者所有;写的挺好拿来大家共同学习。
     
      <!-- tabbedpanel标签 -->
		<!-- 最简单的选项卡,两个选项卡加载都是本页面 -->
		  <hr color="blue">
		  <b>最简单的选项卡:</b>
		  <br>
		        <sx:tabbedpanel id="tab1" beforeSelectTabNotifyTopics="/beforeSelect">
		     <sx:div label="Tab 1" >
		         Local Tab 1
		     </sx:div>  
		     <sx:div label="Tab 2" >
		         Local Tab 2
		     </sx:div>  
		        </sx:tabbedpanel>
		
		
		<!-- 加载其他页面的选项卡 -->
		  <hr color="blue">
		  <b>加载其他页面的选项卡:</b>
		  <br>
		  <sx:tabbedpanel id="tab2">
		  <sx:div label="Remote Tab 1" href="upload.jsp">
		             Remote Tab 1
		        </sx:div>
		     <sx:div label="Remote Tab 2" href="multipleUpload.jsp" >
		             Remote Tab 1
		        </sx:div>
		  </sx:tabbedpanel>
		
		
		<!-- 设置选项卡底下的内容懒加载,即等需要的时候再加载,使用属性preload="false"-->
		  <hr color="blue">
		  <b>设置选项卡底下的内容懒加载,即等需要的时候再加载,使用属性preload="false":</b>
		  <br>
		        <sx:tabbedpanel id="tab3">
		     <sx:div label="Remote Tab 1" href="upload.jsp">
		         Remote Tab 1
		     </sx:div> 
		     <sx:div label="Remote Tab 2" href="multipleUpload.jsp" preload="false">
		         Remote Tab 1
		     </sx:div>     
		        </sx:tabbedpanel>
		
		
		<!-- 固定大小的选项卡 -->
		  <hr color="blue">
		  <b>固定大小的选项卡,使用属性cssStyle和doLayout:</b>
		  <br>
		        <sx:tabbedpanel cssStyle="width: 200px; height: 100px;" doLayout="true" id="tab4">
		     <sx:div label="Tab 1" >
		         Local Tab 1
		     </sx:div>  
		     <sx:div label="Tab 2" >
		         Local Tab 2
		     </sx:div>  
		        </sx:tabbedpanel>
		
		
		<!-- 每次点击选项卡时都重新刷新内容 -->
		  <hr color="blue">
		  <b>每次点击选项卡时都重新刷新内容,使用属性refreshOnShow:</b>
		  <br>
		  <sx:tabbedpanel id="tab5">
		     <sx:div label="Remote Tab 1" href="upload.jsp" refreshOnShow="true">
		         Remote Tab 1
		     </sx:div> 
		     <sx:div label="Remote Tab 2" href="multipleUpload.jsp" refreshOnShow="true">
		         Remote Tab 2
		     </sx:div>     
		  </sx:tabbedpanel>
		
		 
		
		<!-- 使得其中一个选项卡失效 -->
		  <hr color="blue">
		  <b>使得其中一个选项卡失效:</b>
		  <br>
		         <sx:tabbedpanel id="tab6">
		    <sx:div label="Tab 1" >
		        Local Tab 1
		    </sx:div>  
		    <sx:div label="Tab 2" disabled="true">
		        Local Tab 2
		    </sx:div>  
		        </sx:tabbedpanel>
		
		
		<!-- 设置选项卡在底部显示 (可以是: top, right, bottom, left) -->
		  <hr color="blue">
		  <b>设置选项卡在底部显示 (可以是: top, right, bottom, left):</b>
		  <br>
		  <sx:tabbedpanel id="tab7" labelposition="bottom" cssStyle="width:200px;height:100px;" doLayout="true">
		     <sx:div label="Tab 1" >
		         Local Tab 1
		     </sx:div>  
		     <sx:div label="Tab 2" >
		         Local Tab 2
		     </sx:div>  
		  </sx:tabbedpanel>
		
		<!-- 设置选项卡允许关闭,使用属性closeable -->
		  <hr color="blue">
		  <b>设置选项卡允许关闭,使用属性closeable:</b>
		  <br>       
		  <sx:tabbedpanel id="tab8">
		     <sx:div label="Tab 1" >
		         Local Tab 1
		     </sx:div>  
		     <sx:div label="Tab 2"  closable="true">
		         Local Tab 2
		     </sx:div>  
		  </sx:tabbedpanel>

 	 <br/>--------------------------------------------------------------<br/>
     #、sx:textarea @textarea控件 <br/>
     <sx:textarea label="简介" value="sx:textareasx:textareasx:<br/>textareasx:textareasx:textareasx:<br/>textareasx:textareasx:<br/>textareasx:textarea"></sx:textarea>
     
     <br/>--------------------------------------------------------------<br/>
     #、sx:tree @树控件 <br/>
     <sx:tree id="tree1" label="根节点">
	   <sx:treenode id="tn1" label="财务部" />
	   <sx:treenode id="tn2" label="开发部">
	       <sx:treenode id="tn3" label="JAVA" />
	       <sx:treenode id="tn4" label=".NET" />
	   </sx:treenode>
	   <sx:treenode id="tn5" label="人事部" />
	</sx:tree>
     
 </s:form>   
     
  </body>
</html>

 

 

struts.xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "struts-2.1.7.dtd" >
<struts>
	<constant name="struts.custom.i18n.resources" value="struts2"></constant>
	<constant name="struts.configuration.xml.reload" value="true"></constant>
	
	<package name="package1" namespace="/com/rao" extends="struts-default">
		<action name="tagsAction1" class="com.rao.action.TagsAction1">
			<result>/success.jsp</result>
			
		</action>
	</package>
</struts>

 

 TagsAction1.java 代码:

package com.rao.action;

import com.opensymphony.xwork2.ActionSupport;

public class TagsAction1 extends ActionSupport {
	private String userName;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}

	@Override
	public String execute() throws Exception {
		
		return SUCCESS;
	}

}

 

 

GlobalNativeAction.java

package com.rao.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 演示的是在Action 中获取国际化资源文件中的内容
 * @author Administrator
 *
 */
public class GlobalNativeAction extends ActionSupport {

	@Override
	public String execute() throws Exception {
		//不带有占位符的获取方法
		//ActionContext.getContext().put("message", this.getText("welcome"));
		//带有占位符的获取方法
		ActionContext.getContext().put("message", this.getText("welcome",new String[]{"raozhiyong","study"}));
		return "message";
	}

}

 

 

struts2_zh_CN.properties

 

welcome      全局范围:{0},这是一个中文的国际化资源文件,欢迎你的使用{1}!!!

 

GlobalNativeAction_zh_CN.properties

 

welcome      Action范围:{0},这是一个中文的国际化资源文件,欢迎你的使用{1}!!!

 

package_zh_CN.properties

 

welcome      package范围:{0},这是一个中文的国际化资源文件,欢迎你的使用{1}!!!

 

Sex.java

 

 

package com.rao.bean;

public class Sex {
	private int id;
	private String name;
	
	public Sex(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

}

 

 

UserBean.java

 

package com.rao.bean;

import java.io.Serializable;

public class UserBean implements Serializable{

	private static final long serialVersionUID = 1L;
	public UserBean() {}
	
	private Integer userId;
	private String userName;
	public Integer getUserId() {
		return userId;
	}
	public void setUserId(Integer userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}

}

 

 

MyComparator.java

 

 

package com.rao.comparator;

import java.util.Comparator;

public class MyComparator implements Comparator<Integer> {

	public int compare(Integer o1, Integer o2) {
		int c = o1.compareTo(o2); 
		return c;//可以完成顺序排序
		//return -c;//可以完成倒序排序
	}
}

 

 运行结果,附上图片:

 



 

 

 

 

 

 

 

 

 

 

 

 代码见附件压缩包:Struts2-Tags.zip。谢谢!

 

 

 

 

 

 

 

  • 大小: 35.8 KB
  • 大小: 168.6 KB
  • 大小: 148.8 KB
  • 大小: 116.1 KB
  • 大小: 111.6 KB
  • 大小: 50.8 KB
  • 大小: 146.7 KB
  • 大小: 76.9 KB
分享到:
评论
31 楼 清水幽香 2011-04-09  
helin 写道
臭名昭著,恶心人的东西.


臭名昭著?兄弟,你是指哪些?如果是说例子!那我只能说你2了!如果是说Struts2,那我说你更2!有本事你自己写一个框架放到Apache官网上,TMD!站着说话不腰疼!有时间说XXX,还不如多话点时间学习!
30 楼 qq346 2011-04-01  
写得挺综合的 可以当一个查询工具用
29 楼 nndty 2011-04-01  
写得挺好的,3Q。
28 楼 akunamotata 2011-02-17  
helin 写道
臭名昭著,恶心人的东西.



他应该是针对Struts2标签本身说的,并不是针对LZ写的说明......
27 楼 南通ori 2011-01-27  
感谢楼主,多多指教哈~~~~
26 楼 tangliyong 2010-12-24  
楼主总结的东西对初学者很有帮助。
25 楼 hxn_527 2010-12-23  
<div class="quote_title">raozhiyong11 写道</div>
<div class="quote_div">
<p> </p>
<p> </p>
<p>   Struts 2.1 Tags</p>
<p>最近学习  Struts 2.1 Tags 做了些笔记,贴出来大家一起学习下,希望大家多多交流。</p>
<p> </p>
<p>别的都不说了,我就贴代码,代码里注释比较详细,呵呵。</p>
<p>文件目录,如下:</p>
<p> <img src="http://dl.iteye.com/upload/attachment/241408/346c26f6-69bb-33b7-802f-d5ed4a3a3dee.jpg" alt=""></p>
<p> </p>
<p> index.jsp 代码</p>
<pre name="code" class="java">&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;
&lt;%@page import="com.rao.bean.Sex"%&gt;
&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;
&lt;%@ taglib prefix="sx" uri="/struts-dojo-tags"%&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;My page&lt;/title&gt;
  &lt;s:head theme="xhtml"/&gt;
  &lt;sx:head parseContent="true"/&gt;
&lt;/head&gt;

  &lt;body&gt;
    Struts 2.1 Tags
    &lt;br/&gt;
    &lt;br/&gt;
    一、控制标签&lt;br/&gt;&lt;hr size="3" color="red"&gt;
   
     #、if /elseif/ else @用于逻辑判断&lt;br/&gt;
     &lt;s:set name="bir" value="-12"&gt;&lt;/s:set&gt;
     &lt;s:if test="#bir&gt;=180 || #bir&lt;0"&gt;
     你是何方妖怪?
     &lt;/s:if&gt;
     &lt;s:elseif test="#bir&lt;=18 &amp;&amp; #bir&gt;=0"&gt;
     未成年人不能进入!
     &lt;/s:elseif&gt;
     &lt;s:elseif test="#bir&lt;=60 &amp;&amp; #bir&gt;=18"&gt;
     您已经成年!
     &lt;/s:elseif&gt;
     &lt;s:else&gt;
     您已经老了!
     &lt;/s:else&gt;
     &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、append @用于将多个集合合并&lt;br/&gt;
&lt;s:set name="appList1" value="{'111','222','333','444'}"&gt;&lt;/s:set&gt;
&lt;s:set name="appList2" value="{'aaa','bbb','ccc','ddd'}"&gt;&lt;/s:set&gt;
&lt;s:append var="newAppList"&gt;
&lt;s:param value="appList1"&gt;&lt;/s:param&gt;
&lt;s:param value="appList2"&gt;&lt;/s:param&gt;
&lt;/s:append&gt;
&lt;s:iterator value="#newAppList"&gt;
&lt;s:property/&gt; |
&lt;/s:iterator&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、generator  &lt;br/&gt;
generator标签,该标签可以将指定字符串按指定分隔符分割成多个字串。生成的多个字串可以用iterator标签进行迭代输出。可以这么理解:generator标签将一个字符串转换成一个List集合。在该标签体内,整个临时生成的集合将为Valuestack的顶端,但一旦该标签结束,生成的集合将被移除Valuestack。generator标签有如下几个属性:
&lt;br/&gt;
1、count属性:指定生成集合中元素的总数。可选属性。&lt;br/&gt;

2、val属性:必填属性,指定被解析的字符串。&lt;br/&gt;

3、separator属性:这是一个必填属性,指定用于分割字符串的分隔符。&lt;br/&gt;

4、converter属性:可选属性,指定一个转换器,转换器负责将生成的集合中的每个字符串转换成对象,通过这个转换器可以将一个含有分隔符的字符串解析成对象的集合。转换器必须一个继承org.apache.struts2.util.IteratorGenerator.Converter的对象。
&lt;br/&gt;
5、var属性,可选属性。如果指定了该属性,则将生成的集合保存在Stack Context中。如果不指定该属性,则将生成的集合放入ValueStack的顶端,该标签一结束,生成的集合就被移除。该属性也可替换成id。
&lt;br/&gt;
&lt;s:generator  val="'aaa,bbb,ccc,ddd'"  separator="," count="2"&gt;
&lt;s:iterator&gt;
&lt;s:property/&gt;
&lt;/s:iterator&gt;
&lt;/s:generator&gt;&lt;br/&gt;

  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、iterator 用于迭代数据&lt;br/&gt;
&lt;s:set name="iterList" value="{'aaa','bbb','ccc','ddd'}"&gt;&lt;/s:set&gt;
&lt;table border="1"&gt;
&lt;tr&gt;  
                &lt;td&gt;   索引   &lt;/td&gt;  
                &lt;td&gt;   值   &lt;/td&gt;  
                &lt;td&gt;   奇?   &lt;/td&gt;  
                &lt;td&gt;   偶?    &lt;/td&gt;  
                &lt;td&gt;   首?    &lt;/td&gt;  
                &lt;td&gt;   尾?    &lt;/td&gt;  
                &lt;td&gt;  当前迭代数量    &lt;/td&gt;  
            &lt;/tr&gt;  

&lt;s:iterator value="{'aaa','bbb','ccc','ddd','eee','fff'}" begin="1" status="s"&gt;
&lt;tr bgcolor="&lt;s:if test="#s.odd"&gt;pink&lt;/s:if&gt;"&gt;
&lt;td&gt;&lt;s:property value="#s.index"/&gt;&lt;/td&gt;
&lt;td&gt;&lt;s:property/&gt;&lt;/td&gt;
&lt;td&gt;&lt;s:property value="#s.even"/&gt;&lt;/td&gt;
&lt;td&gt;&lt;s:property value="#s.odd"/&gt;&lt;/td&gt;
&lt;td&gt;&lt;s:property value="#s.first"/&gt;&lt;/td&gt;
&lt;td&gt;&lt;s:property value="#s.last"/&gt;&lt;/td&gt;
&lt;td&gt;&lt;s:property value="#s.count"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/s:iterator&gt;
&lt;/table&gt;


  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、merge @和类似:用于将多个集合合并&lt;br/&gt;
&lt;s:set name="merList1" value="{'111','222','333','444'}"&gt;&lt;/s:set&gt;
&lt;s:set name="merList2" value="{'aaa','bbb','ccc','ddd'}"&gt;&lt;/s:set&gt;
&lt;s:append var="newMerList"&gt;
&lt;s:param value="merList1"&gt;&lt;/s:param&gt;
&lt;s:param value="merList2"&gt;&lt;/s:param&gt;
&lt;/s:append&gt;
&lt;s:iterator value="#newMerList"&gt;
&lt;s:property/&gt; |
&lt;/s:iterator&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、sort @用于排序&lt;br/&gt;
&lt;s:bean var="myComparator" name="com.rao.comparator.MyComparator"&gt;&lt;/s:bean&gt;
&lt;s:sort comparator="#myComparator" source="{1,45,56,0,345,3}"&gt;
&lt;s:iterator&gt;
&lt;s:property/&gt;,
&lt;/s:iterator&gt;
&lt;/s:sort&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、subset @用户截取集合中的子集;   注:decider:可选属性,指定由开发者自己决定是否选中该元素. 
&lt;br/&gt;
&lt;s:set name="subList" value="{'@@@','***','&amp;&amp;&amp;','###'}"&gt;&lt;/s:set&gt;
&lt;s:subset source="#subList" start="1" count="2"&gt;
&lt;s:iterator&gt;
&lt;s:property/&gt;,
&lt;/s:iterator&gt;
&lt;/s:subset&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
       二、数据标签&lt;br/&gt;
      &lt;hr size="3" color="red"&gt;
#、action @用于导入一个Action&lt;br/&gt;
使用action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.如果指定了executeResult参数的属性值为true,该标签会把Action的处理结果(视图资源)包含到本页面中. 使用action标签指定属性有:
&lt;br/&gt;
id: 可选属性,作为该Action的引用ID   &lt;br/&gt;
  
name:必选属性,指定调用Action    &lt;br/&gt;
  
namespace:可选属性,指定该标签调用Action所属namespace    &lt;br/&gt;
  
executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false,不包含.    &lt;br/&gt;
  
ignoreContextParam:可选参数,指定该页面的请求参数是否需要传入调用的Action中,默认值是false,即传入参数.&lt;br/&gt;

s:param是以request方式的值的,而不是以参数传值,所以request.getParameter("")会获取不到值,通过request.getAttribute("")方式可以获取&lt;br/&gt;

&lt;s:action name="tagsAction1" ignoreContextParams="true" executeResult="true" namespace="/com/rao"&gt;
&lt;s:param name="userName" value="'三毛'"&gt;&lt;/s:param&gt;
&lt;/s:action&gt;

  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、bean @用于导入一个javaBean,相当于:jsp:useBean 标签&lt;br/&gt;
&lt;s:bean name="com.rao.bean.UserBean" var="user"&gt;
&lt;s:param name="userId" value="1001"&gt;&lt;/s:param&gt;
&lt;s:param name="userName" value="'张三'"&gt;&lt;/s:param&gt;
&lt;/s:bean&gt;
userId:&lt;s:property value="#user.userId"/&gt;&lt;br&gt;
userName:&lt;s:property value="#user.userName"/&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、date @用于格式化日期&lt;br/&gt;
&lt;s:set name="dt" value="new java.util.Date()"&gt;&lt;/s:set&gt;
当期系统时间是:&lt;s:date name="dt" format="yyyy-MM-dd HH:ss:mm"/&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、debug @用于调试程序,让开发人员一目了然的知道当前请求、值栈、栈中的各项参数&lt;br/&gt;
&lt;s:debug/&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、i18n @用于访问国际化资源文件的内容&lt;br/&gt;
1.默认访问全局范围内的资源文件;
&lt;br&gt;
&lt;s:text name="welcome"&gt;
&lt;s:param&gt;三毛&lt;/s:param&gt;
&lt;s:param&gt;学习&lt;/s:param&gt;
&lt;/s:text&gt;

&lt;hr&gt;
2.访问包范围内的资源文件;
&lt;br&gt;
&lt;s:i18n name="com/rao/action/package"&gt;
&lt;s:text name="welcome"&gt;
&lt;s:param&gt;三毛&lt;/s:param&gt;
&lt;s:param&gt;学习&lt;/s:param&gt;
&lt;/s:text&gt;
&lt;/s:i18n&gt;
&lt;hr&gt;
3.访问Action范围内的资源文件;
&lt;br&gt;
&lt;s:i18n name="com/rao/action/GlobalNativeAction"&gt;
&lt;s:text name="welcome"&gt;
&lt;s:param&gt;三毛&lt;/s:param&gt;
&lt;s:param&gt;学习&lt;/s:param&gt;
&lt;/s:text&gt;
&lt;/s:i18n&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、include @用于导入一个jsp文件,等同于:jsp:include标签&lt;br/&gt;
&lt;s:include value="success.jsp"&gt;&lt;/s:include&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、param @用于给指定参数设置值&lt;br/&gt;
&lt;s:bean name="com.rao.bean.UserBean" var="user"&gt;
&lt;s:param name="userId" value="1001"&gt;&lt;/s:param&gt;
&lt;s:param name="userName" value="'张三'"&gt;&lt;/s:param&gt;
&lt;/s:bean&gt;
userId:&lt;s:property value="#user.userId"/&gt;&lt;br&gt;
userName:&lt;s:property value="#user.userName"/&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、property @输出结果,很像EL表达式,但是可以依托于OGNL表带是很强大&lt;br/&gt;
同上
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、push @该标签可以把程序员在ActionContext中引用的对像压入valuestack中,为以后访问对象提供了方便&lt;br/&gt;
&lt;s:push value="#request.user"&gt;&lt;s:property value="userName"/&gt;&lt;/s:push&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、set @用户声明对象或属性&lt;br/&gt;
&lt;s:set name="uName" value="#request.user.userName"&gt;&lt;/s:set&gt;
&lt;s:property value="#uName"/&gt;,你好啊!
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、text @用户获取国际化资源文件的内容&lt;br/&gt;
请参考 il8n标签
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、url @用于组拼一个请求路径&lt;br/&gt;
&lt;s:url var="url1" action="MyAction" method="add"&gt;
&lt;s:param name="id" value="%{23}"&gt;&lt;/s:param&gt;
&lt;s:param name="name" value="%{'tom'}"&gt;&lt;/s:param&gt;
&lt;/s:url&gt;
&lt;s:property value="#url1"/&gt;
&lt;br/&gt;
注意:&lt;br/&gt;  
        &lt;s:set name="myurl" value="'http://www.baidu.com'"&gt;&lt;/s:set&gt;  
        value以字符处理:   &lt;s:url value="#myurl"&gt;&lt;/s:url&gt;&lt;br&gt;  
        value明确指定以ognl表达式处理:    &lt;s:url value="%{#myurl}"&gt;&lt;/s:url&gt;  

  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
   
       三、UI标签&lt;br/&gt;
    &lt;hr size="3" color="red"&gt;
    &lt;s:form&gt;
    #、checkboxlist @复选框列表&lt;br&gt;
   1&gt; .list 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;  
        name:checkboxlist的名字&lt;br&gt;  
        list:checkboxlist要显示的列表&lt;br&gt;  
        value:checkboxlist默认被选中的选项,checked=checked&lt;br&gt;  
        &lt;s:checkboxlist theme="simple" name="checkbox1" list="{'上网','看书','爬山','游泳','唱歌'}" value="{'上网','看书'}" &gt;&lt;/s:checkboxlist&gt;  
        &lt;br&gt;  
      
        2&gt; .Map 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br&gt;  
        name:checkboxlist的名字&lt;br&gt;  
        list:checkboxlist要显示的列表&lt;br&gt;  
        listKey:checkbox 的value的值&lt;br&gt;  
        listValue:checkbox 的lablel(显示的值)&lt;br&gt;  
        value:checkboxlist默认被选中的选项,checked=checked&lt;br&gt;  
        &lt;s:checkboxlist theme="simple" name="checkbox2" list="#{1:'上网',2:'看书',3:'爬山',4:'游泳',5:'唱歌'}" listKey="key" listValue="value" value="{1,2,5}" &gt;&lt;/s:checkboxlist&gt;  
 
         &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
     #、combobox &lt;br/&gt;
    &lt;s:combobox theme="simple" label="选择你喜欢的颜色" name="colorNames"  headerValue="------请选择------" headerKey="1"  list="{'红','橙','黄','绿','青','蓝','紫'}" /&gt;
&lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
     #、radio @单选框&lt;br/&gt;
    &lt;%  
            Sex sex1 = new Sex(1,"男");   
            Sex sex2 = new Sex(2,"女");  
            List&lt;Sex&gt; list = new ArrayList&lt;Sex&gt;();   
            list.add(sex1);  
            list.add(sex2);  
            request.setAttribute("sexs",list);   
        %&gt;  
                      这个与checkboxlist差不多;&lt;br&gt;  
        1&gt;.如果集合为javabean:&lt;s:radio theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"&gt;&lt;/s:radio&gt;&lt;br&gt;  
        2&gt;.如果集合为list:&lt;s:radio theme="simple" name="sexList" list="{'男','女'}"&gt;&lt;/s:radio&gt;&lt;br&gt;  
        3&gt;.如果集合为map:&lt;s:radio theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"&gt;&lt;/s:radio&gt;&lt;br&gt;  
        &lt;hr&gt;  
     &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
     #、select @下拉列表框&lt;br/&gt; 
     这个与s:checkboxlist差不多;&lt;br&gt;  
        1&gt;.如果集合为javabean:&lt;s:select theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"&gt;&lt;/s:select&gt;&lt;br&gt;  
        2&gt;.如果集合为list:&lt;s:select theme="simple" name="sexList" list="{'男','女'}"&gt;&lt;/s:select&gt;&lt;br&gt;  
        3&gt;.如果集合为map:&lt;s:select theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"&gt;&lt;/s:select&gt;&lt;br&gt;  
    
     &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
     #、doubleselect @级联菜单 &lt;br/&gt;
    &lt;!--   可以用直接指定,当然也可以跟数据库绑定的 --&gt;
     &lt;s:set name="proviList" value="{'江西省','湖北省'}"&gt;&lt;/s:set&gt;
     &lt;s:set name="jxList" value="{'南昌市','赣州市','九江市','上饶市','鹰潭市'}"&gt;&lt;/s:set&gt;
     &lt;s:set name="hbList" value="{'武汉市','恩施市','十堰市','荆州市','襄樊市'}"&gt;&lt;/s:set&gt;
     &lt;s:doubleselect theme="simple"  name="provi" doubleList="top=='江西省' ? #jxList : #hbList" list="#proviList" doubleName="city"&gt;&lt;/s:doubleselect&gt;
     &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
     #、optiontransferselect &lt;br/&gt;
     &lt;s:optiontransferselect theme="simple" label="change" name="abc" doubleList="{'111','222','333','444'}" list="{'aaa','bbb','ccc','ddd'}" doubleName="number"&gt;&lt;/s:optiontransferselect&gt;
     &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
     #、updownselect @可上下选择的select &lt;br/&gt;
     &lt;s:updownselect label="selectCity" emptyOption="true" name="selectCity" list="#jxList" headerValue="-Please Select The City-" headerKey="-1"&gt;&lt;/s:updownselect&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
#、sx:datetimepicker @日期选择控件 &lt;br/&gt;
使用步骤:声明:我这里用的是strut 2.1.8.1,在struts2.0的版本中可能有所不同;&lt;br/&gt;
  1.导入struts2-dojo-plugin-2.1.8.1.jar DoJo 插件包;&lt;br/&gt;
  2. 导入标签:&lt;%--@ taglib prefix="sx" uri="/struts-dojo-tags"--%&gt;;&lt;br/&gt;
  3.在需要使用的页面中的head标签之间加上&lt;%-- &lt;sx:head parseContent="true"/&gt; --%&gt;;&lt;br/&gt;
&lt;sx:datetimepicker label="birthday" name="bir" value="#dt"&gt;&lt;/sx:datetimepicker&gt;
  &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
     #、sx:tabbedpanel @选项卡控件 &lt;br/&gt;
     声明:这个标签代码转至:http://blog.sina.com.cn/s/blog_6145ed810100ecud.html,版权归作者所有;写的挺好拿来大家共同学习。
    
      &lt;!-- tabbedpanel标签 --&gt;
&lt;!-- 最简单的选项卡,两个选项卡加载都是本页面 --&gt;
  &lt;hr color="blue"&gt;
  &lt;b&gt;最简单的选项卡:&lt;/b&gt;
  &lt;br&gt;
        &lt;sx:tabbedpanel id="tab1" beforeSelectTabNotifyTopics="/beforeSelect"&gt;
     &lt;sx:div label="Tab 1" &gt;
         Local Tab 1
     &lt;/sx:div&gt; 
     &lt;sx:div label="Tab 2" &gt;
         Local Tab 2
     &lt;/sx:div&gt; 
        &lt;/sx:tabbedpanel&gt;


&lt;!-- 加载其他页面的选项卡 --&gt;
  &lt;hr color="blue"&gt;
  &lt;b&gt;加载其他页面的选项卡:&lt;/b&gt;
  &lt;br&gt;
  &lt;sx:tabbedpanel id="tab2"&gt;
  &lt;sx:div label="Remote Tab 1" href="upload.jsp"&gt;
             Remote Tab 1
        &lt;/sx:div&gt;
     &lt;sx:div label="Remote Tab 2" href="multipleUpload.jsp" &gt;
             Remote Tab 1
        &lt;/sx:div&gt;
  &lt;/sx:tabbedpanel&gt;


&lt;!-- 设置选项卡底下的内容懒加载,即等需要的时候再加载,使用属性preload="false"--&gt;
  &lt;hr color="blue"&gt;
  &lt;b&gt;设置选项卡底下的内容懒加载,即等需要的时候再加载,使用属性preload="false":&lt;/b&gt;
  &lt;br&gt;
        &lt;sx:tabbedpanel id="tab3"&gt;
     &lt;sx:div label="Remote Tab 1" href="upload.jsp"&gt;
         Remote Tab 1
     &lt;/sx:div&gt;
     &lt;sx:div label="Remote Tab 2" href="multipleUpload.jsp" preload="false"&gt;
         Remote Tab 1
     &lt;/sx:div&gt;    
        &lt;/sx:tabbedpanel&gt;


&lt;!-- 固定大小的选项卡 --&gt;
  &lt;hr color="blue"&gt;
  &lt;b&gt;固定大小的选项卡,使用属性cssStyle和doLayout:&lt;/b&gt;
  &lt;br&gt;
        &lt;sx:tabbedpanel cssStyle="width: 200px; height: 100px;" doLayout="true" id="tab4"&gt;
     &lt;sx:div label="Tab 1" &gt;
         Local Tab 1
     &lt;/sx:div&gt; 
     &lt;sx:div label="Tab 2" &gt;
         Local Tab 2
     &lt;/sx:div&gt; 
        &lt;/sx:tabbedpanel&gt;


&lt;!-- 每次点击选项卡时都重新刷新内容 --&gt;
  &lt;hr color="blue"&gt;
  &lt;b&gt;每次点击选项卡时都重新刷新内容,使用属性refreshOnShow:&lt;/b&gt;
  &lt;br&gt;
  &lt;sx:tabbedpanel id="tab5"&gt;
     &lt;sx:div label="Remote Tab 1" href="upload.jsp" refreshOnShow="true"&gt;
         Remote Tab 1
     &lt;/sx:div&gt;
     &lt;sx:div label="Remote Tab 2" href="multipleUpload.jsp" refreshOnShow="true"&gt;
         Remote Tab 2
     &lt;/sx:div&gt;    
  &lt;/sx:tabbedpanel&gt;



&lt;!-- 使得其中一个选项卡失效 --&gt;
  &lt;hr color="blue"&gt;
  &lt;b&gt;使得其中一个选项卡失效:&lt;/b&gt;
  &lt;br&gt;
         &lt;sx:tabbedpanel id="tab6"&gt;
    &lt;sx:div label="Tab 1" &gt;
        Local Tab 1
    &lt;/sx:div&gt; 
    &lt;sx:div label="Tab 2" disabled="true"&gt;
        Local Tab 2
    &lt;/sx:div&gt; 
        &lt;/sx:tabbedpanel&gt;


&lt;!-- 设置选项卡在底部显示 (可以是: top, right, bottom, left) --&gt;
  &lt;hr color="blue"&gt;
  &lt;b&gt;设置选项卡在底部显示 (可以是: top, right, bottom, left):&lt;/b&gt;
  &lt;br&gt;
  &lt;sx:tabbedpanel id="tab7" labelposition="bottom" cssStyle="width:200px;height:100px;" doLayout="true"&gt;
     &lt;sx:div label="Tab 1" &gt;
         Local Tab 1
     &lt;/sx:div&gt; 
     &lt;sx:div label="Tab 2" &gt;
         Local Tab 2
     &lt;/sx:div&gt; 
  &lt;/sx:tabbedpanel&gt;

&lt;!-- 设置选项卡允许关闭,使用属性closeable --&gt;
  &lt;hr color="blue"&gt;
  &lt;b&gt;设置选项卡允许关闭,使用属性closeable:&lt;/b&gt;
  &lt;br&gt;      
  &lt;sx:tabbedpanel id="tab8"&gt;
     &lt;sx:div label="Tab 1" &gt;
         Local Tab 1
     &lt;/sx:div&gt; 
     &lt;sx:div label="Tab 2"  closable="true"&gt;
         Local Tab 2
     &lt;/sx:div&gt; 
  &lt;/sx:tabbedpanel&gt;

&lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
     #、sx:textarea @textarea控件 &lt;br/&gt;
     &lt;sx:textarea label="简介" value="sx:textareasx:textareasx:&lt;br/&gt;textareasx:textareasx:textareasx:&lt;br/&gt;textareasx:textareasx:&lt;br/&gt;textareasx:textarea"&gt;&lt;/sx:textarea&gt;
    
     &lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;
     #、sx:tree @树控件 &lt;br/&gt;
     &lt;sx:tree id="tree1" label="根节点"&gt;
   &lt;sx:treenode id="tn1" label="财务部" /&gt;
   &lt;sx:treenode id="tn2" label="开发部"&gt;
       &lt;sx:treenode id="tn3" label="JAVA" /&gt;
       &lt;sx:treenode id="tn4" label=".NET" /&gt;
   &lt;/sx:treenode&gt;
   &lt;sx:treenode id="tn5" label="人事部" /&gt;
&lt;/sx:tree&gt;
    
&lt;/s:form&gt;  
    
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p> </p>
<p> </p>
<p>struts.xml 代码:</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "struts-2.1.7.dtd" &gt;
&lt;struts&gt;
&lt;constant name="struts.custom.i18n.resources" value="struts2"&gt;&lt;/constant&gt;
&lt;constant name="struts.configuration.xml.reload" value="true"&gt;&lt;/constant&gt;

&lt;package name="package1" namespace="/com/rao" extends="struts-default"&gt;
&lt;action name="tagsAction1" class="com.rao.action.TagsAction1"&gt;
&lt;result&gt;/success.jsp&lt;/result&gt;

&lt;/action&gt;
&lt;/package&gt;
&lt;/struts&gt;</pre>
<p> </p>
<p> TagsAction1.java 代码:</p>
<pre name="code" class="java">package com.rao.action;

import com.opensymphony.xwork2.ActionSupport;

public class TagsAction1 extends ActionSupport {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}

@Override
public String execute() throws Exception {

return SUCCESS;
}

}
</pre>
<p> </p>
<p> </p>
<p>GlobalNativeAction.java</p>
<pre name="code" class="java">package com.rao.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 演示的是在Action 中获取国际化资源文件中的内容
* @author Administrator
*
*/
public class GlobalNativeAction extends ActionSupport {

@Override
public String execute() throws Exception {
//不带有占位符的获取方法
//ActionContext.getContext().put("message", this.getText("welcome"));
//带有占位符的获取方法
ActionContext.getContext().put("message", this.getText("welcome",new String[]{"raozhiyong","study"}));
return "message";
}

}</pre>
<p> </p>
<p> </p>
<p>struts2_zh_CN.properties</p>
<p> </p>
<p> </p>
<table style="border-bottom-color: #e54a19; border-right-width: 0px; border-top-color: #e54a19; border-top-width: 0px; border-bottom-width: 0px; border-right-color: #e54a19; border-left-color: #e54a19; border-left-width: 0px;" border="0"><tbody><tr>
<td>welcome   </td>
<td>   全局范围:{0},这是一个中文的国际化资源文件,欢迎你的使用{1}!!!</td>
</tr></tbody></table>
<p> </p>
<p>GlobalNativeAction_zh_CN.properties</p>
<p> </p>
<p> </p>
<table style="border-bottom-color: #e54a19; border-right-width: 0px; border-top-color: #e54a19; border-top-width: 0px; border-bottom-width: 0px; border-right-color: #e54a19; border-left-color: #e54a19; border-left-width: 0px;" border="0"><tbody><tr>
<td>welcome   </td>
<td>   Action范围:{0},这是一个中文的国际化资源文件,欢迎你的使用{1}!!!</td>
</tr></tbody></table>
<p> </p>
<p>package_zh_CN.properties</p>
<p> </p>
<p> </p>
<table style="border-bottom-color: #e54a19; border-right-width: 0px; border-top-color: #e54a19; border-top-width: 0px; border-bottom-width: 0px; border-right-color: #e54a19; border-left-color: #e54a19; border-left-width: 0px;" border="0"><tbody><tr>
<td>welcome   </td>
<td>   package范围:{0},这是一个中文的国际化资源文件,欢迎你的使用{1}!!!</td>
</tr></tbody></table>
<p> </p>
<p>Sex.java</p>
<p> </p>
<p> </p>
<pre name="code" class="java">package com.rao.bean;

public class Sex {
private int id;
private String name;

public Sex(int id, String name) {
super();
this.id = id;
this.name = name;
}

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}
</pre>
<p> </p>
<p> </p>
<p>UserBean.java</p>
<p> </p>
<pre name="code" class="java">package com.rao.bean;

import java.io.Serializable;

public class UserBean implements Serializable{

private static final long serialVersionUID = 1L;
public UserBean() {}

private Integer userId;
private String userName;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}

}
</pre>
<p> </p>
<p> </p>
<p>MyComparator.java</p>
<p> </p>
<p> </p>
<pre name="code" class="java">package com.rao.comparator;

import java.util.Comparator;

public class MyComparator implements Comparator&lt;Integer&gt; {

public int compare(Integer o1, Integer o2) {
int c = o1.compareTo(o2);
return c;//可以完成顺序排序
//return -c;//可以完成倒序排序
}
}
</pre>
<p> </p>
<p> 运行结果,附上图片:</p>
<p> </p>
<p><br><img src="http://dl.iteye.com/upload/attachment/241416/83cb0c10-55b0-36c3-9adb-f49301b1f4ba.jpg" alt=""></p>
<p> <br><img src="http://dl.iteye.com/upload/attachment/241418/b279db60-411c-3061-8b3e-0470290631fc.jpg" alt=""><br> <br><img src="http://dl.iteye.com/upload/attachment/241420/dc2d41fd-e7b9-3394-922e-b18263b2e288.jpg" alt=""><br> <br><img src="http://dl.iteye.com/upload/attachment/241422/a4dfcfff-865e-315d-ab4d-5154cea3860b.jpg" alt=""><br> <br><img src="http://dl.iteye.com/upload/attachment/241424/9ce8717a-907b-346a-9d4b-2ab63277a66e.jpg" alt=""><br> <br><img src="http://dl.iteye.com/upload/attachment/241426/1dd8a56a-eae9-3daf-9fa6-ce9f29b0f933.jpg" alt=""><br> <br><img src="http://dl.iteye.com/upload/attachment/241428/0e7e0077-7ded-3128-bf88-795f8209290e.jpg" alt=""></p>
<p> </p>
<p> </p>
<p> </p>
<p> 代码见附件压缩包:Struts2-Tags.zip。谢谢!</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</div>
<p> </p>
24 楼 KimShen 2010-09-02  
weir2009 写道
struts2的标签确实用的少

说明你可能没用Struts2实际开发过,Struts2去除标签部分开发效率-50%完败给SpringMVC.就是有了完备的标签库才能勉强站在SpringMVC头上一点点.
你可以说他的标签太麻烦,那是因为你OGNL用得不顺手,你可以说OGNL速度慢,但最新的OGNL已经足够快了.
23 楼 anonymousstone 2010-09-01  
大家分享的地方,不喜欢走人就行了,不要骂人嘛.
22 楼 lanjian 2010-07-26  
<p>楼主例子挺精彩,,我也做了个网站专门是收藏 web 标签的,,<a href="http://www.web-tag.net">http://www.web-tag.net</a><br>但不知道为什么,,突然被隐藏掉了,,然后我翻查了一下,才知道被投了不少隐藏票,,郁闷中,,</p>
<p> </p>
21 楼 ciki 2010-07-26  
看样子楼主还是很辛苦的制作收集了这些,感谢了。
20 楼 ciki 2010-07-26  
仁者见仁智者见智,求同存异,不必拘泥于别人
19 楼 leiwuluan 2010-07-22  
哈哈、、、只是笑笑,而以。

高手只看文字的描述,

而刚入门呢。楼写得对他们非有帮助。

而那位用词不当的高手,也不要那样说话。
那样会影响你的品尝和素质。。以后说话注意。哈哈

18 楼 shl163 2010-07-21  
weir2009 写道
struts2的标签确实用的少

其实我个人觉得struts2标签用的还是比较多的,因为很多强大的功能就可以发挥出来了,至于样式,可以将
struts.iu.theme 设为simple就和一般html标记显示是一样的,呵呵
17 楼 hyhai7 2010-07-18  
struts2的标签确实有些繁琐,不过,也有它存在的意义,抛开这些框架,你也完全可以自己定义标签,何必要每个东西都去完美呢,
16 楼 murainwood 2010-07-15  
hommy8 写道
个人认为我不值得用框架的标签。 试想,如果以后项目改用struts3,并且重构了后台。而且struts3的标签不兼容struts2(就像struts2不兼容struts一样)那你的杯具就开始了

折腾这些个破烂Java Web框架有意义么?
15 楼 zhouyurain 2010-07-15  
helin 写道
臭名昭著,恶心人的东西.


强烈鄙视,打击LZ的共享精神
14 楼 weir2009 2010-07-09  
struts2的标签确实用的少
13 楼 ling1121 2010-07-01  
感谢楼主!struts2是好东西
12 楼 noddle0592 2010-06-30  
蛮详细的,不错

相关推荐

    Struts2.1权威指南——基于WebWork核心的MVC开发.pdf

    - **第9章Struts2的标签库**:详细说明Struts2提供的自定义标签,这些标签能够简化页面元素的渲染过程。 - **第10章Struts2的拦截器**:介绍拦截器的作用、配置方式以及自定义拦截器的开发方法。 - **第11章Struts2...

    struts2.1配置

    Struts2.1配置是Java Web开发中一个关键步骤...总的来说,Struts2.1的配置涉及到Web应用的结构、配置文件、Action类、表单类、JSP页面和标签库的综合运用。理解并正确配置这些元素是构建有效、高效Struts2应用的基础。

    struts 2.1常用6个jar包

    以下是对"struts 2.1常用6个jar包"的详细说明: 1. **struts2-core.jar**:这是Struts 2的核心库,包含了框架的主要组件,如Action类、Result类、Interceptor拦截器接口、ValueStack等。这个JAR包是所有Struts 2...

    struts2讲义_吴峻申

    5.7 Struts2自定义标签实现图形验证功能 121 第6章 Struts2非JSP视图技术 125 6.1 velocity视图技术使用介绍 125 6.2 freemarker视图技术使用介绍 128 6.3 JasperReports报表视图技术使用介绍 130 第7章 Struts2类型...

    struts 案例

    "Struts2 实现分页(网址,文章收藏) - 平静的影子 - 博客园.htm"和"struts标签实现博客园的分页 - 垚淼 - 博客园.htm"这两篇文章可能详细解释了如何通过Struts2的控制器和视图层实现这一功能,包括传递参数、计算页码...

    struts从入门到精通.doc

    - **3.8 Struts简单例子的分析(含代码注释和配置文件说明)** - 提供了一个简单的Struts示例,并对其代码和配置文件进行了详细解释。 - **3.9 本章小结** #### 第4章 配置Struts组件 - **4.1 Web应用部署描述符*...

    struts2学习笔记,总结了很多学习的经验

    至于Struts2.0和Struts2.1的区别,虽然这里没有具体说明,但通常更新版本会修复已知问题,增加新功能,提高性能,并可能引入一些不向后兼容的变化。例如,从Struts2.0到Struts2.1可能会改进Action的生命周期,增强...

    MyEclipse8下struts2开发例程及解析1.doc

    - `freemarker-2.x.x.jar`:Struts 2 UI 标签的模板引擎。 - `commons-logging-1.1.x.jar`:Apache Software Foundation 提供的日志包,Struts 2 使用它来支持 Log4J 和 JDK 日志记录。 - `commons-fileupload-1....

    struts2.5.16升级过程中遇到问题详述

    本文主要针对从旧版本Struts2框架升级至2.5.16版本时可能遇到的各种问题进行详细介绍,并给出相应的解决方案。这包括了jar包的替换与引入、配置文件的调整、代码层面的改动等内容。 #### 二、Jar包替换与引入 ####...

    struts2.0.1-core-api-chm

    在CHM文件`struts2-API.chm`中,开发者可以找到上述所有概念的详细说明,包括每个类的构造函数、方法、属性以及它们的使用示例。这将极大地提高开发效率,帮助开发者更好地理解和运用Struts2框架。通过深入学习和...

    struts2类型转换深入总结

    从Struts2.1版本开始,可以使用`@Converter`注解直接在Action类或字段上声明自定义的转换器,简化了配置过程。 5. **类型转换的执行顺序**: - 先尝试使用字段上的注解声明的转换器。 - 如果注解不存在,会查找...

    struts2_spring3.0_Junit4.7_Maven2.2.1_整合运行说明_培训.pdf )

    #### Struts2.1.8.1 Struts2是一个基于MVC设计模式的Java Web应用框架。它提供了丰富的标签库和强大的插件系统,能够极大地简化Web应用的开发过程。Struts2与Spring框架集成后,可以更好地管理业务逻辑和Web层之间的...

    spring2.5.5+struts2+ibatis2.3.4

    3. **配置文件编写**:按照上述说明编写 `web.xml` 和 `struts.xml`。 4. **业务逻辑实现**:编写具体的业务逻辑代码,如 Action 类、DAO 层等。 5. **单元测试**:编写测试用例,确保各部分功能正常运行。 6. **...

    Struts2动态树型从数据库取出

    本文详细介绍了如何在Struts2框架中实现动态树型结构的构建,包括后端代码的设计与实现、前端页面的布局与交互逻辑。通过这些技术点的学习,开发者可以更好地理解和应用Struts2框架来开发具有复杂数据展示需求的应用...

    Struts2 Spring2 Hibernate3 整合实例

    在提供的压缩包中,"Struts2 2.1.8.1Basic-Spring2.5.6.SEC01-Hibernate3-MySql5-NetBeans6.9.1"应该包含了完成这个整合实例所需的所有文件,包括源码、配置文件、数据库脚本等。使用NetBeans 6.9.1或导入到...

    Struts in Action 中文版(有索引).pdf

    书中详细介绍了如何将 Struts 框架应用于实际的 Web 应用开发过程中,包括但不限于:如何使用 Struts 的 MVC 架构来组织代码,如何利用其内置的标签库简化页面开发等。 #### 1.1.5 再看看 这部分内容可能是指对 ...

    struts.doc

    ### Struts标签、动态ActionForm、上传组件及Struts验证框架知识点详解 #### 一、Struts标签 **Struts** 是一款基于 **MVC**(Model-View-Controller)设计模式的开源Java Web框架,它能够帮助开发者构建可扩展且...

Global site tag (gtag.js) - Google Analytics