Struts2 标签库

    struts2标签库提供了主题,模板支持,极大地简化了视图页面的编写,而且,struts2的主题,模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。

    struts2的标签可以分为五大类:

一、逻辑控制标签

(1)条件标签

条件标签主要有<s:if><s:elseif><s:esle>3个子标签,用于执行基本的条件流转

  1. <s:if test="#request.username=='admin'">  
  2.    您是admin!  
  3.  </s:if>  
  4. <s:elseif test="#request.username=='manager'">  
  5.    您是manager!  
  6. </s:elseif>  
  7. <s:else>  
  8.    您没有身份!  
  9. </s:else

test:条件判定语句,值为boolean类型。

注意:<s:if test=" sex == 'M' ">男</s:if> 与 <s:if test = ' sex == "M" '>男</s:if> 不同,"M"为字符串,而'M'为字符

(2)迭代标签

<s:iterator>标签用于遍历集合(java.util.Collection)或者枚举值(java.util.Iterator)类型的对象。

1、遍历普通List、数组

  1. //后台存放数据到list中  
  2. List<String > list = newArrayList<String>();  
  3. list.add("aaa");list.add("bbb"); list.add("ccc");  
  4.   
  5. <!-- 用iterator标签遍历list -- >  
  6. <s:iterator value="list"var="v">  
  7.     <s:property value="v"/><br>  
  8. </s:iterator>  
  9.  或者:  
  10. <s:iteratorvalue="list">  
  11.      <s:property/><br>  
  12. </s:iterator>  
2、遍历对象List、数组

  1. <s:iterator value="users" id="us">  
  2.     <!--可以这样: <s:property value="#us.name"/>  -->  
  3.     <s:property value="name"/>  
  4.     <s:property value="email"/><br/>  
  5. </s:iterator>

3、 status属性的应用

  1. <s:iterator value="users" id="us" status="u">  
  2.     序列号:<s:property value="#u.index"/>  
  3.      姓名:  <s:property value="name"/>  
  4.      邮件:  <s:property value="email"/>  
  5.      是否第一条:  <s:property value="#u.first"/>  
  6.      是否最后一条:<s:property value="#u.last"/>  
  7.      是否偶数行:  <s:property value="#u.even"/>  
  8.      是否奇数行:  <s:property value="#u.odd"/>  
  9.      当前行数:    <s:property value="#u.count"/>  
  10. </s:iterator> 

    id:指定集合中元素在值栈中的名称。
    value:指定迭代的迭代体。
    var:指向值栈中的值。
    status:该属性在迭代时会产生一个IteratorStatus对象,该对象可以判断当前元素的位置。

二、数据输出标签

(1)action标签

<s:action>标签用于在jsp页面中直接调用Action

  1. <s:action name="loginAction"  namespace="/user" ignoreContextParam="false"  executeResult="true" >  
  2.     <s:param name="userName" value="'张三'"></s:param>    
  3. </s:action>

    name:struts.xml中指定Action的名称

    executeResult:指定是否将Action的处理结果包含到本页面中.默认值为false(即不包含)

    ignoreContextParam:指定该页面的请求参数是否需要传入调用的Action中,默认值是false(即传入参数)  

注意:<s:param>是以request方式的值的,而不是以参数传值,所以request.getParameter("")会获取不到值,通过request.getAttribute("")方式可以获取到。 

(2)date标签

<s:date>标签用以格式化日期并显示

<s:date name="user.birth" format="yyyy-MM-dd HH:ss:mm"nice="false"/>

    name:表示要输出的日期对象。

    format:输出的日期格式。

    nice:指定是否输出指定日期与当前时刻之间的时差.若nice="true",则format属性失效,只输出当前时刻与指定日期间的间隔;若nice=“false”,则是输出指定日期。

(3)bean标签

bean标签用于创建javaBean实例,需要java类提供相应的getter、setter方法

  1. <s:bean name="pojo.User" id = "user">  
  2.        <s:param name="name" value=" '张三' "></s:param>  
  3.        <s:param name="email" value=" '48964565@qq.com' "></s:param>  
  4.        <s:param name="age" value="20"/>  
  5.        <s:param name="birth" value="'2010-4-1'"/>  
  6. </s:bean>  
  7. <s:property value="#user.name"/>  
  8. <s:property value="#user.email"/>  
  9. <s:property value="#user.age"/>  
  10. <s:date name="#user.birth" format="yyyy-MM-dd" nice="false"/>

    name:必填,指定要实例化的JavaBean的实现类

    id:可选.如指定了该属性,则该Javabean实例会被放入StackContext中(不是ValueStack),从而允许直接通过该id属性来访问该JavaBean实例.如果未指定,则该Javabean实例会被放入ValueStack中,该标签结束,生成的子集被移出valuestack栈。

注意:java类String类型的属性赋值时,必须再加个单引号' '。

(4)param标签

param标签用于为其他标签添加参数,用法如下:

  1. <!--  第一种用法 -->  
  2. <s:param name="参数名" value="参数值"/>  
  3. <!-- 第二种用法 -->  
  4. <s:param name="参数名">参数值</s:param> 

注意:字符串赋值时要加单引号。详见bean标签用法。

(5)property标签

property标签用于输出一个属性值。

<s:property value="user.name" escape="false" default="默认值" />

    value:指定属性的名称,默认值是栈顶元素。

    escape:指定输出的内容是否要经过HTML转义,默认值是true。escape="false"表示会将类似"<h2>aaa</h2>"的字符串转义成html显示。

    default:指定默认值。

(6)<s:url>标签和<s:a>标签

<s:url>标签通常与<s:a>标签一起使用,<s:url>标签主要用于赋值給href属性,用于指定链接的地址和传递的参数。

  1. <!-- 指定链接的action 及 传递的参数 -->  
  2. <s:url action="getUserList" namespace="test2" id="getUserListUrl" method="execute">    
  3.    <s:param name="id" value="1"></s:param>     
  4.    <s:param name="page" value="1"></s:param>  
  5. </s:url>  
  6.   
  7. <!-- 链接地址引用了<s:url>的值 -->  
  8. <s:a href="%{getUserListUrl}" >获取用户列表</s:a> 

其结果等同于<a href="/test2/getUserList ! execute ?id = 1 & page = 1"></a>

(7)<s:debug>标签

<s:debug>标签用于在页面上生成一个连接,当点击链接时,可以看到ValueStack 和 Stack Context中的内容

三、HTML表单标签

(1)表单标签

  1. <s:form action=" " method="post" enctype="multipart/form-data" namespace="/test1">   
  2.       <s:textfield  label="姓名" name="username"  tooltip="Enter your Name here"  />  
  3.       <s:password label="密码"  name="password" />  
  4.       <s:textarea  label="备注" name="remark" cols="20" rows="3" tooltip="Enter your remark"/>  
  5.       <s:hidden name="topic.ic" value="<s:property value='topic.id'/>"></s:hidden> 
  6.       //注意<s:property>标签的value值是单引号。  
  7.       <s:submit   value="提交"/>  
  8.       <s:reset  value="重置" />  
  9. </s:form> 

enctype:共有3个值:

    1)application/x-www-form-urlencoded:默认值,使用范围广,但向服务器发送大量文本、包含非ASCII字符的文本或二进制数据时该编码效率很低。

    2)multipart/form-data:上传二进制数据,使用该值即可完整的传递文本文件数据。

    3)text/plain:主要使用于发送电子邮件的应用。

    4)namespace:设置action的包命名空间。

注意:当该标签设置了namespace属性后,action属性设置不能加.action后缀。

(2)<s:select>标签

  1. <!-- 数据前台设置 -->  
  2. <s:select  label="性别"  name="gender" list="#{1:'男',2:'女'}"  listKey="key" listValue="value" value="#{2:'女'}" emptyOption="true" headerKey="-1"  headerValue="--请选择性别--"  tooltip="Choose your gender" />   
  3. <!-- 数据后台获取 -->  
  4. List<User> user;  //后台添加数据到list中  
  5. <s:select  label="用户"  name="gender" list="user"  listKey="userId" listValue="name"  emptyOption="true" headerKey="-1"  headerValue="--请选择用户--"  tooltip="Choose your gender" /> 
list属性(必设):必须是一个可以迭代的源,如为一个List, Map, Set等

  1)如果集合为javabean:<s:select theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"></s:select>

  2)如果集合为list:<s:select theme="simple" name="sexList" list="{'男','女'}"></s:select>

  3)如果集合为map:<s:select theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value" ></s:select>

    listKey:设置后台传送的数据项。

    listValue:设置前台显示的数据项。

    emptyOption:设置是否有空选项。

    value:设置默认显示数据列表list中的选项。

    headerValue:设置下拉框头条显示数据。

    headerKey:设置下拉框头条后台传回的数据。

(3)<s:combobox>标签

<s:combobox theme="simple" label="选择你喜欢的颜色" name="colorNames"  headerValue="------请选择------"   headerKey="1"  list="{'红','橙','黄','绿','青','蓝','紫'}" />

    属性说明详见<s:select>标签。

(4)<s:checkboxlist>标签

<s:checkboxlist name="hobby" label="兴趣"  list="#{1:'football', 2:'music',3:'basketball', 4:'computer'}"  listKey="key"  listValue="value" tooltip="Choose your hobby"/>

    属性说明详见<s:select>标签。

(5)<s:checkbox>标签

<s:checkbox name="age" label="年龄" value="18"  fieldValue="yes" tooltip="Confirmed that your are Over 18"/> 

    fieldVaule:设置选中时向后台传送的数据(默认不设时返回的是布尔类型)。

    value:设置前台显示的数据。

(6)<s:radio>标签

<s:radio list="#{1:'男',2:'女'}" name="gender" label="性别" required="true" value="1"></s:radio> 

    value:默认选中的选项的key值。

(7)<s:file>标签

<s:file label="上传" theme="simple" name="uploadfile"/>  

(8)<s:hidden>标签

<s:hidden name="uid"/>

四、HTML非表单标签

(1)<s:actionerror>标签

actionerror标签用于输出存储在ActionError中的值。

     <s:actionerror/>

Action类中添加actionerror信息:addActionError("出错了!");

(2)<s:actionmessage>标签

actionmessage标签用于输出存储在ActionMessage中的值。

    <s:actionmessage/>

Action类中添加actionmessage信息:addActionMessage("出错了!");

(3)<s:fielderror>标签

fielderror标签用于输出FieldError中的值。默认错误信息显示在所对应field标签的上方。

    <s:textfield name="user.name" label="姓名" />

Action类中添加fielderror信息:addFieldError("user.name", "用户名不能为空!");

注意:(1) actionerror与actionmessage功能差不多,不过在<head></head>中加上<s:head/>标签后,actionerror和fielderror的错误信息有CSS效果(变红),而actionmessage无效果。

         (2) 在添加错误信息前最好先clearErrorsAndMessages();来清空之前加载的错误信息。

五、AJAX标签

<%@taglib prefix="sx" uri="/struts-dojo-tags" %>

    记得在<head></head>中加上<sx:head/>标签,<sx:head/>标签 用来下载Dojo文件和相应的Javascript代码

(1)<sx:div>标签

<sx:div>标签可以异步定时加载刷新数据。

  1. <!-- 用于显示异步加载的数据 -->  
  2. <div id="msg">     
  3.    <s:property value="message"/>  
  4. </div>  
  5. <!-- 定时5s加载test2.action中的message属性值,并刷新id=“msg”的div标签-->  
  6. <sx:div updateFreq="5000" href="test2/test2.action" delay="100" errorText="出错了!" loadingText="正在请求..." showLoadingText="true" indicator="msg">  
  7. </sx:div> 
    href:异步请求的资源地址。

    updateFreq:自动更新div内容的间隔,以毫秒为单位。

    autoStart:页面加载后是否启动定时器,默认为true。

    delay:第一个异步请求开始之前等待的时间,以毫秒为单位。

    loadText:当请求正在处理时显示的文本。

    showLoadingText:是否显示loadText值,默认为false。

    errorText:当请求失败时显示的文本。

    indicator:当请求正在处理时具有这个id的元素将被显示。

    executeScript:执行服务器返回内容中的javascript代码,默认为false。

    formId:指定表单id,表单字段将被序列化并作为参数传递。

(2)<sx:a>标签

  1. <!-- 单击"用户信息列表信息" 链接后会加载userList.jsp表到userListDiv标签上,其中getUserList.action是跳转到userList.jsp页面的 -->  
  2. <sx:a href="test2/getUserList.action"  targets="userListDiv" loadingText="加载中..." showLoadingText="true" errorText="加载失败!">用户信息列表</sx:a>  
  3. <div id="userListDiv"></div>  
  4. <!-- userList.jsp -->  
  5. <body>  
  6.   <table border="1" cellpadding="0" cellspacing="0">  
  7.     <thead>  
  8.         <tr>  
  9.             <th colspan="4">用户信息列表</th>  
  10.         </tr>  
  11.     </thead>  
  12.     <tbody>  
  13.         <tr>  
  14.             <th>序列号</th>  
  15.             <th>用户名</th>  
  16.         </tr>  
  17.         <s:iterator value="users" id="us" status="u">  
  18.         <tr>  
  19.             <td><s:property value="#u.index"/></td>  
  20.             <td><s:property value="name"/></td>  
  21.         </tr>  
  22.         </s:iterator>  
  23.     </tbody>       
  24. </table>  
  25. </body> 
    href:异步请求的资源地址。

    targets:被更新的元素列表。

    loadText:当请求正在处理时显示的文本。

    showLoadingText:是否显示loadText值,默认为false。

    errorText:当请求失败时显示的文本。

    indicator:当请求正在处理时具有这个id的元素将被显示。

    executeScript:执行服务器返回内容中的javascript代码,默认为false。

    formId:指定表单id,表单字段将被序列化并作为参数传递。

(3)<sx:submit>标签

<sx:submit>标签的使用和<sx:a>标签的使用一样,这里就不举例了。

(4)<sx:datetimepicker>标签

<sx:datetimepicker name="book.publicationDate" value="today" label="出版日期" displayFormat="yyyy-MM-dd" ></sx:datetimepicker> 

(5)<sx:textarea>标签

<sx:textarea name="user.remark"  label="备注"  rows="20" cols="50"></sx:textarea> 

提示:<sx:textarea>标签提交的文本是带Html标签的。

(6)<sx:tree>标签

  1. <sx:tree label="城市" id="city" showRootGrid="false" showGrid="false" treeSelectedTopic="treeSelected">       
  2.       <sx:treenode label="北京" id="bj">       
  3.             <sx:treenode label="朝阳" id="cy"></sx:treenode>       
  4.             <sx:treenode label="中关村" id="zgc"></sx:treenode>       
  5.       </sx:treenode>  
  6.       <sx:treenode label="天津" id="tj">  
  7.            <sx:treenode label="白洋淀" id="byd"></sx:treenode>       
  8.       </sx:treenode>  
  9. </sx:tree>      
  10.   
  11. <script language="JavaScript" type="text/javascript">  
  12.      dojo.event.topic.subscribe("treeSelected", function treeNodeSelected(node) {  
  13.          alert(node.node.widgetId + node.node.title);  
  14.      });  
  15. </script> 

showRootGrid:是否显示根节点,默认为true。

showGrid:是否显示结点间的连接线,默认为true。

treeSelectedTopic:选中时的时间。

(7)<sx:tabbedpanel>标签

  1. <sx:tabbedpanel id="tab1" cssStyle="width:300px;" labelposition="top" selectedTab="tab2">        
  2.       <sx:div  id="tab1" label="Tab 1" cssStyle="height:100px;" href="index.jsp" closable="true" preload="false" >  
  3.           Local Tab 1       
  4.       </sx:div>          
  5.       <sx:div id="tab2"  label="Tab 2" cssStyle="height:100px;" href ="index.jsp"  refreshOnShow="true">        
  6.           Local Tab 2       
  7.       </sx:div>          
  8.       <sx:div id="tab3"  label="Tab 3" disabled="true">        
  9.           Local Tab 3       
  10.       </sx:div>   
  11. </sx:tabbedpanel>  

    closable:设置该tab标签是否可关闭。

    href:加载资源。若为jsp页面,则加载该页面到该tab中。

    preload:设置是否预先加载,默认为true。

    cssStyle:用于设置tab选项卡大小。

    refreshOnShow:设置是否每次单击选项卡重新加载内容,默认为false。

    disabled:设置选项卡是否失效,默认为false。

    labelposition:设置选项卡标头的显示位置,可以是top, right, bottom, left。

    selectedTab:设置默认选中的选项卡。

Struts 2 标签库(文档手册) Tags-API-CLSW-JSP <%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. <s:a href=""></s:a>-----超链接,类似于html里的<a></a> 3. <s:action name=""></s:action>-----执行一个view里面的一个action 4. <s:actionerror/>-----如果action的errors有值那么显示出来 5. <s:actionmessage/>-----如果action的message有值那么显示出来 6. <s:append></s:append>-----添加一个值到list,类似于list.add(); 7. <s:autocompleter></s:autocompleter>-----自动完成<s:combobox>标签的内容,这个是ajax B: 1. <s:bean name=""></s:bean>-----类似于struts1.x中的,JavaBean的值 C: 1. <s:checkbox></s:checkbox>-----复选框 2. <s:checkboxlist list=""></s:checkboxlist>-----多选框 3. <s:combobox list=""></s:combobox>-----下拉框 4. <s:component></s:component>-----图像符号 D: 1. <s:date/>-----获取日期格式 2. <s:datetimepicker></s:datetimepicker>-----日期输入框 3. <s:debug></s:debug>-----显示错误信息 4. <s:div></s:div>-----表示一个块,类似于html的<div></div> 5. <s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----双下拉框 E: 1. <s:if test=""></s:if> 2. <s:elseif test=""></s:elseif> 3. <s:else></s:else>-----这3个标签一起使用,表示条件判断 F: 1. <s:fielderror></s:fielderror>-----显示文件错误信息 2. <s:file></s:file>-----文件上传 3. <s:form action=""></s:form>-----获取相应form的值 G: 1. <s:generator separator="" val=""></s:generator>----和<s:iterator>标签一起使用 H: 1. <s:head/>-----在<head></head>里使用,表示头文件结束 2. <s:hidden></s:hidden>-----隐藏值 I: 1. <s:i18n name=""></s:i18n>-----加载资源包到值堆栈 2. <s:include value=""></s:include>-----包含一个输出,servlet或jsp页面 3. <s:inputtransferselect list=""></s:inputtransferselect>-----获取form的一个输入 4. <s:iterator></s:iterator>-----用于遍历集合 L: 1. <s:label></s:label>-----只读的标签 M: 1. <s:merge></s:merge>-----合并遍历集合出来的值 O: 1. <s:optgroup></s:optgroup>-----获取标签组 2. <s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右选择框 P: 1. <s:param></s:param>-----为其他标签提供参数 2. <s:password></s:password>-----密码输入框 3. <s:property/>-----得到'value'的属性 4. <s:push value=""></s:push>-----value的值push到栈中,从而使property标签的能够获取value的属性 R: 1. 2. <s:radio list=""></s:radio>-----单选按钮 3. <s:reset></s:reset>-----重置按钮 S: 1. <s:select list=""></s:select>-----单选框 2. <s:set name=""></s:set>-----赋予变量一个特定范围内的值 3. <s:sort comparator=""></s:sort>-----通过属性给list分类 4. <s:submit></s:submit>-----提交按钮 5. <s:subset></s:subset>-----为遍历集合输出子集 T: 1. <s:tabbedPanel id=""></s:tabbedPanel>-----表格框 2. <s:table></s:table>-----表格 3. <s:text name=""></s:text>-----I18n文本信息 4. <s:textarea></s:textarea>-----文本域输入框 5. <s:textfield></s:textfield>-----文本输入框 6. <s:token></s:token>-----拦截器 7. <s:tree></s:tree>-----树 8. <s:treenode label=""></s:treenode>-----树的结构 U: 1. <s:updownselect list=""></s:updownselect>-----多选择框 2. <s:url></s:url>-----创建url ___________________________________________________ struts2框架的标签库分为三类: 用户标签:生成HTML元素 非用户标签:数据访问、逻辑控制等。 AJAX标签:支持AJAX技术。 用户界面标签又分两类: 表单标签:生成HTML页面的from元素 非表单标签:生成页面上的Tab、Tree等 非界面标签又分为数据访问标签和流程控制标签。 控制标签: if/elseif/else标签:控制流程分支。 iteratot标签:对集合属性迭代(属性类型:List、Map、数组)。 append标签:将多个集合对象拼接在一起,组成一个新的集合。将多个集合使用一个<iterator/>标签完成迭代。 generatot标签:将指定的字符串按照规定的分隔符分解成多个子字符串。 merge标签:将多个集合拼接在一起。 subset标签:获取某个集合的子集合。 sort标签:多指定的集合元素进行排序。 数据标签: action:直接调用一个Action,根据executeResult参数,可以将Action的处理结果包含到页面中。 bean:创建一个JavaBean实例。。 date:格式化输出一个日期属性。 debug:生成一个调试链接,当单击该链接时,可以看到当前栈值中的内容。 i18n:指定国际化资源文件的baseName。 include:包含其他的页面资源。 param:设置参数。 property:输出某个值。可以输出值栈、StackContext 、ActionContext中的值。 push:将某个值放入值栈。 set:设置一个新的变量。 text:输出国际化信息。 url:生成一个URL地址。 表单标签: checkbox标签:复选框。 checkboxlist标签:根据一个集合属性创建一系列的复选框。 combobox标签:生成一个单选文本框和一个下拉列表框的组合。 doubleselect标签:生成一个相互关联的列表框,该标签由两个下拉选择框组成。 datetimepicker标签:生成一个日期、时间下拉列表框。 head标签:生成HTML页面的HEAD部分。 file标签:在页面上生成一个上传文件元素。 hidder标签:生成一个不看见的用户输入元素。 select标签:生成下拉列表框。 optiontransferselect标签:创建两个选项以及转移下拉列表项,该标签生成两个下拉列表框,同时生成相应的按钮,这些按钮可以控制选项在两个下拉列表之间移动、排序。 radio标签:单选框。 optgroup标签:生成一个下拉列表框的选择组,下拉列表框中可以包含多个选择组。 token标签:防用户多次提交表单。 textarea标签:文本域。 updownselct标签:支持选项内容的上下移动。 password表单:密码表单域。 textfield标签:单行文本输入框。 非表单标签: actionerror标签:输出Action中getActionErrors()方法返回的异常信息。 actionmessage标签:输出Action中getActionErrors()方法返回的信息。 component标签:生成一个自定义的组件。 div标签:AJAX标签,生成一个div片段。 fielderror标签:输出异常提示信息。 tabbedPanel:AJAX标签,生成HTML中的Tab页。 tree标签:生成一个树形结构。 treenode标签:生成树形结构的节点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值