Struts2标签库

Struts2标签主要学习目标

 一、 Struts2标签库概述 
 二、 Struts2数据标签 
 三、 Struts2控制标签 
 四、 Struts2表单标签 
 五、 Struts2非表单标签 

  Struts2标签库概述 
 Struts2标签库的组成 
 Struts2框架的标签库能够分为以下三类: 
        用户界面标签(UI标签):主要用来生成HTML元素的标签。 
                表单标签:主要用于生成HTML页面的FORM元素。以及普通表单元素的标签。

 
                非表单标签:主要用于生成页面上的tree,Tab页等。 
        非用户界面标签(非UI标签):主要用于数据訪问,逻辑控制。

 
                数据訪问标签:主要包括用于输出值栈(ValueStack)中的值,完毕国际化等功能的标签。

 
                流程控制标签:主要包括用于实现分支,循环等流程控制的标签。 
         AJAX标签:用于支持Ajax效果 

 Struts2标签库

       在早期的WEB开发中。JSP视图控制和显示技术主要依靠Java脚本来实现,这样一来。JSP页面又一次嵌入了大量的Java脚本代码。给开发带来了极大的不方便。 
      从JSP1.1规范后,JSP添加了自己定义标签库的支持。标签库是一种组件技术,通过标签库。能够将复杂的Java脚本代码封装在组件中。开发人员仅仅须要使用简单的代码就能够实现复杂的Java脚本功能。

提供了Java脚本的复用性。提高了开发人员的开发效率。 
      Struts2标签库相对struts1.x进行了巨大的改进。支持OGNL表达式。不再依赖不论什么表现层技术。



Struts2标签的使用 
 我们能够在struts2-core-2.0.11.jar压缩文件的META-INF文件夹下找到struts-tags.tld文件 ,这个文件中定义了Struts2的标签。 
 
 要在jsp中使用Struts2的标志,先要指明标志的引入。

通过jsp的代码的顶部加入以下的

代码: 
 
  <%@taglib prefix="s" uri="/struts-tags" %> 

Struts2标签语法(一) 
      Struts2的标签都支持动态数据的訪问,标签的属性都能够使用OGNL表达式。struts2标签的
属性具有类型。这些类型能够简单地分为字符串类型和非字符串类型。对于字符串类型的属
性,假设要訪问动态数据,须要使用%{… }这种语法, 
    比如:<s:include value=“%{ url }” /> 
 
     Include标签的value属性是字符串类型,Struts2将对这个属性进行解析。查找符合%{…}样式
的字符串。然后将花括号之间的内容作为OGNL表达式进行求值。

假设属性中没有%{…}样式
的字符串,那么属性的值将被直接看成是字符串数据。 
    比如:<s:include value=“urlTag.action” /> 
 
     对于非字符串类型的属性值,将直接作为OGNL表达式进行求值。 
     比如:<s:property value=“username”/> 
 
     property标签的value属性是Object类型。它的值username将作为OGNL表达式进行求值,结
果是值栈中位于栈顶的对象的username属性的值。

假设要为非字符串类型的属性直接指定字
符串数据,那么须要使用OGNL中的字符串常量,即用单引號(‘)或双引號(“)将字符
串括起来。

 
     比如:<s:property value=“’zhangsan‘”/> 
value属性的值‘zhangsan’作为字符串常量,计算结果就是zhangsan,因此输出zhangsan


Struts2标签语法(二) 
除上述使用方法之外。也能够使用%{…}这种语法来指定字符串常量。 
比如: <s:property value=“%{ ‘zhangsan’ }”/> 
在这种情况下,%{ }将被忽略,花括号里的内容将作为表达式被计算。 
 
总结一下,struts2标签的属性依照下列的三个规则进行计算。 
               (1)全部的字符串属性类型都会解析“%{…}”这种语法。

 


               (2)全部的非字符属性类型都不会被解析,而是直接被看作一个OGNL表达式进行求值 
               (3)对于第二个规则的例外情况是,假设非字符串属性使用了“%{…}”语法,那么  %{…}将被忽略,花括号里的内容将作为表达式计算。

 

假设大家在使用标签时。 忘记了某个属性是字符串类型,还是非字符串类型。那么有一个简单的方法。那就是不考虑它是什么类型,统一使用“%{…}”语法。


Struts2通用标签 
Struts2中通用标签能够分为二类:

控制标签和数据标签。控制标签用于呈现页面时控制运行流程,数据标签用于訪问值栈中的数据。 
 
数据标签:用于訪问ActionContext和值栈中的数据。

数据标签包括: 
    property  set  push  param  bean  action  include   
    url  a  i18n  text  date  debug 
 
控制标签:用于在呈现结果页面时控制程序的运行流程,依据程序运行的状态输出不同的结果,控制标签包括下列标签: 
    if/elseif/else        iterator  append      merge 
     generator        subset  sort     

数据标签-----property标签 

property标签用于输出值栈中的对象的属性(property)值,使用value属性来指定要输出的对象属性,假设没有指定value属性,那么默认输出栈顶对象。

      比如:<s:property value=“username” default=“游客” /> 
   取出栈顶对象(一般是action)的username属性并输出,假设没有找到username属性,那么输出”游客”。 

数据标签-----set标签 
Set标签将一个值赋给指定范围内变量。Set标签在某些情况下是比較实用的。比如在页面中多次引用一个复杂的表达式。我们能够将这个表达式赋给一个变量。然后直接引用变量。带来的优点就是: 
     提升了性能(表达式的计算仅仅有一次) 
     提高了代码的可读性。

 

Set标签以name属性的值作为键(key),将value属性的值保存到指定的范围对象中。属性scope取值中的page,request,session,application同JSP的4种范围,假设指定了action范围(默认值),value属性的值将被同一时候保存到request范围和OgnlContext中。 

数据标签-----push标签 
     push标签用于把一个值压入值栈(位于栈顶),注意和set标签的差别。set标签是将值放到action上下文中。当push标签结束后。push标签放入值栈中的对象将被删除,换句话说。要訪问push标签压入栈中的对象,须要在标签内部去訪问。 
数据标签-----param标签 
param标签被用作其它标签的子标签,用于为其它标签提供參数,比如:为bean标签和include标签提供參数。 

当使用param标签时, 參数的值能够通过value属性给出。也能够在标签体中给出(開始标签和结束标签之间的文本)。

这二种使用方法有一些差别。

我们看以下的样例: 
       <param name=“color”>blue</param>    <!--  (1) --> 
       <param name=“color” value=“blue” />   <!--  (2) --> 
在第(1)种情形中。參数值将作为java.lang.String对象(即字符串)被放入栈中; 
在第(2)种情形中,參数值将作为表达式进行计算,假设blue不存在,则color參数的值为null。 
在第(1)种情形中,要为color指定字符串值,能够写为: 
         <param name=“color” value=“ ‘ blue ‘ ”/>或者<param name=“color” value=“%{‘ blue ‘ }“/> 
使用单引號包围字符串。表明这是一个字符串常量 



数据标签-----bean标签 
bean标签用于实例化一个JavaBean对象(必须遵照JavaBean规范)。bean标签的标签 体内能够包括多个param标签,用于设置Bean的属性(必须有相应的setter方法)。假设 指定了id属性,则创建的Bean实例将被放入到OgnlContext中。 

注意: 
        id属性是可选的,不管是否指定id属性。bean标签创建的JavaBean实例都会被压入到值栈的顶部,在bean标签内部能够直接訪问创建的对象,无须使用”#”标记,当bean标签结束的时候,bean标签创建的实例将从值栈中删除。 
        假设指定了id属性,那么bean标签创建的JavaBean实例还将被放到OgnlContext中,这样在bean标签的外部。也能够訪问创建的对象了,只是此时就要使用”#”标记了

数据标签-----action标签 
通过指定action的名字和可选的名称空间,action标签同意你在JSP中直接调用action。

假设将标签的excuteResult属性设为true,那么action相应的结果输出也将被包括到本页面中。 在action标签的标签体中能够嵌套param标签,向action传递參数。


假设指定了id属性,则action将被放到OgnlContext中。在action标签结束后,能够通过#id来引用action. 


数据标签-----include标签 
include标签类似于JSP的<jsp:include>标签,用于包括一个Servlet或JSP页面。
include标签的标签体内能够包括多个param标签,用于向被包括的页面传递请求參数 


数据标签-----i18n和text标签 
i18n和text标签用于对国际化提供支持.i18n标签用于将一个资源包放入值栈,text标签用于从 资源包中获取消息。比如 
<s:i18n name=“ApplicationResources”> 
    <s:text name=“title”/> 
</s:i18n> 
i18n标签将基名为ApplicationResources的资源包放入到值栈中。text标签从资源包中获取键 为title的文本消息。

 


注意:i18n标签放入值栈的资源包仅仅能在i18n标签的标签体内訪问。一旦i18n标签结束。值 栈中的资源包将被删除。 
 
text标签也能够单独使用,在这种情况下。它将首先查找资源包的基名与调用的Action类名 同样的资源包。

这意味着你能够在Action类所在的包中创建与Action类名同样的资源文件,

比如:在com.ibm.action包中有一个名为LoginAction的类。 你能够在com.ibm.action包括中 创建名为LoginAction.propertiesLoginAction_zh.properties、LoginAction_en.properties等 资源文件(名字中的LoginAction部分称为基名),当运行完LoginAction后,在转向的果页面 中使用单独的text标签获取本地化的文本消息,那么text标签将从 com.ibm.action.LoginAction_xx.properties(依据当前的语言环境选择某个资源文件)中读取 name属性值相应的文本消息。

 

数据标签-----date标签 
date标签用于格式化输出日期值,也可用于输出当前日期值与指定日期值之间的时差

注意: 
1、format属性用于指定日期的格式化样式,具体的样式规则可java.text.SimpleDateFormat类的API文档。

 
2、将nice属性设为true。能够输出指定日期值和当前日期值之效,也就是说,当nice属性为true时,即使你指定了format属性
3、假设没有使用nice属性,也没有指定format属性,那么date查找struts.date.format键。并以这个键的值作为日期的格式化么默认将会使用DateFormat.MEDIUM格式化样式。

 
4、假设找不到name属性指定的Date对象,那么将返回空。 


控制标签  
控制标签用于完毕流程控制,比如分支。循环等操作。

控制标签包括以下几个: 


     if:用于控制选择输出。 
     elseif:同if标签结合使用,用来控制选择输出。

 


     else:同if标签结合使用,用来控制选择输出。

 


     append:用来将多个集合拼接为一个新的集合。 
     generator:为一个字符串解析器。用来将一个字符串解析为一个集合。

 


     iterator:迭代器,用来迭代输出集合数据。 
     merge:用来将多个集合拼接为一个新的集合,同append有所差别。 
     sort:用来对集合排序。

 

       subset:用来截取集合的部分集合,开成新的集合子集合

控制标签-----if/elseif/else标签 
     if/elseif标签属性test:为必填属性,是一个Boolean类型值,决定是否显示if标签内容。
该标签标准格式例如以下: 
<s:if test=“表达式”> 
  …….. 
</s:if> 
<s:elseif test=“表达式”> 
  …….. 
</s:elseif> 
<s:else> 
  ……….. 
</s:else> 

控制标签----- if/elseif/else标签举例 
<%@ taglib prefix="s" uri="/struts-tags"%> 
 
<!-- 定义一个testname属性 --> 
    <s:set name="testname" value="%{'Java'}" /> 
    <!-- 使用if标签推断-->  
    <s:if test="%{#testname=='Java'}"> 
      <div> 
        <s:property value="%{# testname}" /> 
      </div> 
    </s:if> 
    <s:elseif test="%{#testname=='Jav'}"> 
      <div> 
        <s:property value="%{# testname}" /> 
      </div> 
    </s:elseif> 
    <s:else> 
      <div> 
        testname不是“Java” 
      </div> 
    </s:else> 

控制标签----- if/elseif/else标签举例 
<%@ taglib prefix="s" uri="/struts-tags"%> 
 
<s:set name="age" value="61"/> 
<s:if test="${age > 60}">  
    老年人  
</s:if> 
<s:elseif test="${age > 35}"> 
    中年人 
</s:elseif> 
<s:elseif test="${age > 15}" id="wawa"> 
    青年人 
</s:elseif> 
<s:else> 
    少年 
</s:else> 

控制标签----- if/elseif/else标签举例 
<%@ taglib prefix="s" uri="/struts-tags"%>  
<s:set name="name" value="<%="'"+ request.getParameter("name")+"'" %>"/> 
<% 
  System.out.println(request.getParameter("name")); 
 %> 
<s:if test="#name=='zhaosoft'"> 
  zhaosoft here 
</s:if> 
<s:elseif test="#name=='zxl'"> 
  zxl here 
</s:elseif> 
<s:else> 
  other is here  
</s:else> 

控制标签----- iterator(迭代标签)  
Iterator(迭代) 
描写叙述:用于遍历集合(java.util.Collection)List,Map,数组或枚举值(java.util.iterator)。

IteratorStauts实例包括方法 
int getCount():返回当前迭代过元素的总数。 
int getIndex():返回当前迭代元素的索引。 
boolean isEven():推断当前迭元素是否为偶数。 
boolean isOdd():推断当前迭元素是否为奇数。

 
boolean isFirst():推断当前迭元素是否为第一个元素。

 
boolean isLast():推断当前迭元素是否为最后一个元素 
 
IteratorStauts的这些方法分别相应了count,index,even,odd,first,last属性 

控制标签----- iterator(迭代标签)举例 
<s:iterator value ="{'第一个元素','第二个元素'}" > 
  <p>day is: <s:property/></p> 
</s:iterator> 
 
private List myList; 
private Map myMap; 
public String execute() throws Exception { 
myList = new ArrayList(); 
myList.add("第一个元素"); 
myList.add("第二个元素"); 
myList.add("第三个元素"); 
myMap = new HashMap(); 
myMap.put("key1", "第一个元素"); 
myMap.put("key2", "第二个元素"); 
myMap.put("key3", "第三个元素"); 
return SUCCESS; 

 省略生成setter/getter方法

<table> 
    <s:iterator value="{'第一个元素','第二个元素'}" status="st"> 
    <tr> 
    <td><s:property value="#st.getIndex()" /></td> 
      <td><s:property /></td> 
    </tr> 
      </s:iterator> 
  </table> 
 
    <h2>显示List属性</h2> 
    <table> 
          <s:iterator value="myList" status="st"> 
      <tr> 
        <td><s:property value="#st.getIndex()" /></td> 
        <td><s:property /></td> 
      </tr> 
         </s:iterator> 
    </table> 

<h2>显示Map</h2> 
  <table> 
    <s:iterator value="#{'key1':'第一个元素','key2':'第二个元素'}" status="st"> 
           <tr> 
      <td><s:property value="#st.getIndex()" /></td> 
      <td><s:property /></td> 
           </tr> 
    </s:iterator> 
  </table> 
 
    <h2>显示Map属性</h2> 
  <table> 
    <s:iterator value="myMap" status="st"> 
          <tr> 
      <td><s:property value="#st.getIndex()" /></td> 
      <td><s:property /></td> 
         </tr> 
    </s:iterator> 
  </table> 


控制标签----- append标签 
append:用来将多个集合拼接为一个新的集合。这样拼接的目的就是能够将多个集合使用一个<iterator  />标签完毕迭代。

标签属性id:指定了集合元素的ID。

 


private List myList1, myList2; 
private Map myMap1, myMap2; 
public String execute() throws Exception { 
  myList1 = new ArrayList();   
  myList2 = new ArrayList(); 
  myList1.add("第一个集合#第一个元素"); 
  myList1.add("第一个集合#第二个元素"); 
  myList1.add("第一个集合#第三个元素"); 
  myList2.add("第二个集合#第一个元素"); 
  myList2.add("第二个集合#第二个元素"); 
  myList2.add("第二个集合#第三个元素"); 
  myMap1 = new HashMap();  myMap2 = new HashMap(); 
  myMap1.put("key1", "第一个集合#第一个元素"); 
  myMap1.put("key2", "第一个集合#第二个元素"); 

  myMap1.put("key3", "第一个集合#第三个元素"); 
  myMap2.put("key1", "第二个集合#第一个元素"); 
  myMap2.put("key2", "第二个集合#第二个元素"); 
  myMap2.put("key3", "第二个集合#第三个元素"); 
  return SUCCESS; 
}  //省略setter/getter方法 


<h1><span style="background-color: #FFFFcc">Append标签演示样例</span></h1>
    <h2>拼接List属性</h2> 
    <table> 
      <s:append id="newList"> 
        <s:param value="myList1" /> 
        <s:param value="myList2" /> 
      </s:append> 
      <s:iterator value="#newList" id="name" status="st"> 
          <tr> 
               <td><s:property value="#st.getIndex()" /></td> 
               <td><s:property /></td> 
          </tr> 
      </s:iterator> 
    </table> 
    <h2>拼接Map属性</h2> 
    <table> 

  <s:append id="newMap"> 
          <s:param value="myMap1" /> 
          <s:param value="myMap2" /> 
  </s:append> 
  <s:iterator value="#newMap" status="st"> 
           <tr> 
                <td><s:property value="#st.getIndex()" /></td> 
                <td><s:property /></td> 
           </tr> 
  </s:iterator> 
</table> 


控制标签----- generator标签  
generator标签用来将指定的字符串按规定的分隔符分解为多个子字符串,生成的多个子字符串能够使用iterator标签输出。 
该标签的属性例如以下: 
     id:指定了集合元素的ID。 
     count:可选属性,为一个Integer类型值,指定生成集合中元素的总数。 
     separator:必填属性,为一个String类型值,指定用来分解字符串的分隔符。 
     val:必填属性。为一个String类型值。指定被分解的字符串。 
     converter:可选属性,为一个Converter类型实例。指定一个转换器,该转换器负
责将集合中的每一个字符串转换为对象。 

控制标签----- generator标签举例 

private String msg; 
public String getMsg() { 
  return msg; 

public void setMsg(String msg) { 
  this.msg = msg; 

public String execute() throws Exception { 
  setMsg("第一个元素;第二个元素;第三个元素"); 
  return SUCCESS; 

控制标签----- generator标签举例 
<h1> 
  <span style="background-color: #FFFFCC">Generator标签演示样例</span> 
</h1> 
<table> 
  <s:generator separator=";" val="msg" id="temp" count="2"></s:generator> 
  <s:iterator  status="st"  value="#attr.temp"> 
    <tr> 
      <td><s:property value="#st.getIndex()" /></td> 
      <td><s:property /></td> 
    </tr> 
  </s:iterator> 
</table> 

注意:假设在generator标签中指定了count属性,则该集合中最多仅仅能有count个元素,多余的元素将会被忽略。 

控制标签----- append标签 

append:用来将多个集合拼接为一个新的集合。

控制标签----- merge标签 
Merge标签用于合并迭代器,其使用方法与append类似。差别就是对合并后的迭代器中的 元素迭代的顺序不一样。 


控制标签----- subset标签 
Subset标签用于截取一个迭代器的子集。其内部实现是通过 org.apache.struts2.util.SubsetIteratorFilter类来完毕的。 


控制标签----- sort标签 
Sort标签依据comparator属性指定的比較器对集合进行排序,并将排序后的迭代器压入值 栈的栈顶。在sort标签的内部,你能够使用iterator标签取出栈顶的迭代器对排序后的元素 进行迭代。

当sort标签结束时。栈顶的迭代器将被删除。


表单标签 
Struts2的表单标签能够分为两类,form标签本身和包装HTML表单元素的其它标签。
form标签本身的行为不同于它内部的元素。 
Struts2表单标签包括下列标签: 
form     textfield      password        radio  checkbox      checkboxlist     select 
doubleselect      combobox       optiontransferselect       optgroup       updownselect 
textarea       hidden       file      label    reset     submit     token      head 


  



表单标签的name和value属性 
非常多表单标签(form标签除外)的name属性和value属性之间存在一个独特的关系。

name属性除了为HTML表单元素指定名字。在表单提交时作为请求參数的名字外,同时它还映射到Action的属性。 在大多数情况下,name属性映射到一个简单的JavaBean属性,比如name属性的值为”postalCode”,在表单提交后,struts2框架将会调用Action的setPostalCode()方法来设置属性。

 有的时候你希望在表单元素中显示Action属性的数据。这时就轮到value属性登场了,为value属性指定表达式”%{postalCode}”,这将会调用Action的getPostalCode()方法,并在表单中显示返回的数据。之后, 用户能够编辑这个值,然后又一次提交它。 


form标签 
form标签输出一个HTML输入表单,此外,xhtml主题的form标签还输出表单元素外围 的表格。 

1)通常情况下,当前输出表单的请求和提交表单的请求属于同一个命名空间。

比如:请求/admin/updateCategory!default.action输出的表单。命名空间会被假设为/admin。因此在
使用form标签时,能够不使用namespace属性。例如以下: 
<s:form action=“updateCategory”  > 
假设输出表单的请求和提交表单的请求分属于不同的名称空间,那么能够通过 
namespace属性指定处理表单提交的action所属的名称空间。

 
2)若通过action的一个非execute方法输出表单,然后将表单提交给action默认的execute方
法运行,那么form标签的action属性能够忽略。

比如:对于以下的表单:      
<s:form  > 
    <s:textfield name=“username” label=“用户名”/> 
    <s:submit  /> 
</s:form> 
当訪问/register!default.action时, 输出上表单。form标签会自己主动将action属性设为 register,这样在表单提交后就会运行action的execute方法。 
3)method和enctype是HTML form标签的属性。 
4)当使用验证框架时。将form标签的validate属性设为true,将自己主动生成client的JavaScript验证代码。 
<s:form  action=“register” method=“post” /> struts2默认的主题是xhtml,上述代码在client浏览器中的输出例如以下: 
<s:form id=“register” οnsubmit=“return true” action=“register”  method=“post”> 
<table class=“wwFormTable”></table> 
</s:form> 
能够看到form标签内部输出了一个table元素。 


textfield标签 
textfield标签输出一个HTML单行文本输入控件,等价于HTML代码:<input  type=“text” …/> 
看以下的代码: 
<s:form action=“register” method=“post”> 
  <s:textfield name=“username” label=“用户名” /> 
</s:form> 

 

password标签 
password标签输出一个HTML口令输入控件。等价于HTML代码:<input type=“password” ../> 
样例:<s:password name=“password”  label=“密码” /> 


textarea标签 
textarea标签输出一个HTML多行文本输入控件,等价于HTML代码:<textarea …./>. 
样例: 
  <s:textarea  name=“personal” cols=“30”  rows=“5” label=“个人简历” /> 


select标签 
select标签输出一个HTML列表框,等价于HTML代码: 
  <select …><option..></option></select> 


select标签演示样例 
演示样例一: 
<s:form> 
    <s:select label=“最高学历” name=“education”  list=“{‘高中’。‘大学’,‘硕士’}”  
/> 
</s:form> 
在select标签的list属性中直接使用OGNL表达式创建了一个列表,列表中的每一项都将作为
HTML列表框的一个选项。 
 
演示样例二: 
<s:form> 
    <s:select label=“最高学历” name=“education”  list=“#{1:‘高中’。2:‘大学’,3:‘硕士
’}”  /> 
</s:form> 

在select标签的list属性中直接使用OGNL表达式创建了一个Map。在这里要注意的是。Map的key是作为列表框选项的值,而Map中的value是作为列表框选项的内容。
演示样例三: 
<s:form> 
    <s:select label=“最高学历” name=“education” list=“{‘高中’,‘大学’,‘硕士
’}”  headerKey=“-1”   headerValue=“请选择你的学历”  /> 
Header选项主要用来越提示作用。因此应该将header选项的值(通过headerKey属性设置)
设为无意义的值,比如此处的-1. 
 
演示样例四: 
<s:form> 
    <s:select label=“最高学历” name=“education” list=“{‘高中’。‘大学’,‘硕士
’}”  headerKey=“-1”   headerValue=“请选择你的学历”   emptyOption=“true”  
multiple=“true” / > 

 使用emptyOption属性在header选项后加入一个空的选项。 
  multiple属性设为false,则仅仅能从下拉列表中选择一个选项,假设设为true,则能够多选。

optgroup标签 
    optgroup标签作为select标签的子标签使用,用于创建选项组。你能够在select标签的标签体中
使用一个或者多个optgroup标签,对选项进行逻辑分组。注意, optgroup标签本身不能嵌套。

 


 
     样例: 
  <%@ taglib prefix=“s” uri=“/struts-tags” %> 
  <s:form> 
 <s:select label="选择图书" name="book" list="#{1:'JAVA核心编程',2:'深入struts2学习'}" > 
     <s:optgroup label="C/C++图书" list="#{3:'VC++编程具体解释',4:'Spring具体解释'}"/> 
 <s:optgroup label="Oracle图书" list="#{5:'Oracle基础',6:'DBA入门'}"/> 
</s:select>   
</s:form> 

optgroup标签注意 
optgroup标签的label属性指定选项组的组名。 optgroup标签相应的模板须要使用listKey和listValue属性的值,因此你要么为list属性指定一个Map类型的值(此时,listKey默觉得Map.Entry的key,listValue默觉得Map.Entry的value),要么为list属性指定一个对象列表。然后使用listKey和listValue属性指定对象的属性作为选项的值和内容


radio标签 
radio标签输出一组HTML单选button,等价于一组HTML代码:<input type=“radio” …/> 
 
样例: 
<%@ taglib prefix="s" uri="/struts-tags" %> 
<s:form> 
  <s:radio name="user.sex" value="1" list="#{1 : '男', 0 : '女'}" label="性别" /> 
</s:form> 


checkbox标签 
checkbox标签输出一个HTML复选框,等价于代码:<input type=“checkbox”…/> 
checkbox标签创建一个value属性为true或者为false的复选框。你能够通过checkbox标签的fieldValue属性来指定创建的HTML复选框value属性的值。我们看以下的代码: <s:checkbox name=“user.username” label=“是否显示Email” fieldValue=“true” /> 复选框的值是true还是false,是由fieldValue属性来控制的。而不是由通常的value属性来设置的。 
 
注意,除非你知道你要做什么。否则不要将fieldValue属性设置为false。将fieldValue属性设置为false可能会导致一些问题。HTML规范规定。复选框仅仅有在选中时才会被提交,在通常的Servlet/JSP处理过程中,我们能够通过推断复选框的name属性所指定的请求參数是否存在来获知用户是否选中了复选框,假设选中。则取出它的值。

然而。在使用struts2框架时,这一切发生了一些微妙的变化。假设将fieldValue属性设置为false。那么复选框的值将是false。当没有选中复选框时,提交的请求參数中不会有复选框相应的请求參数。只是,尽管struts2框架没有接收到这个请求參数,但它仍然会将复选框相应的action属性的值设为false。

于是你就会看到一个奇怪的现象。那就是不管你是否选中复选框,相应的action属性的值都是false. 


checkboxlist标签  
checkboxlist标签使用一个列表创建一系列复选框。属性设置与<s:select/>和<s:radio/>类
似,仅仅是创建的是HTML复选框。不同的是, checkboxlist标签是多选标签。 
演示样例: 
<s:form> 
  <s:checkboxlist name="interest" list="{'足球','篮球','排球','游泳'}" label="兴趣爱好"/> 
</s:form> 

hidden标签 
hidden标签输出一个HTML隐藏表单元素,等价于HTML代码:<input type=“hidden”…/>.在 xhtml主题下,hidden标签与其它的标签不太一样。hidden标签并不输出表行。

xhtml主题直

接从simple主题继承了hidden.ftl模板。

除了公共属性外,hidden标签没有特有的属性。 


 
演示样例:  <s:hidden name=“id”  value=“5” /> 

submit标签 
submit标签输出一个提交button。 submit标签和form标签一起使用能够提供异步表单提 交功能。 submit标签能够输出以下三种类型的提交button。 
     input:等价于HTML代码<input type=“submit”…> 
     image:等价于HTML代码<input type=“image”…> 
     button:等价于HTML代码<input type=“submit”…> 
HTML的button标签已经演进为能够分别指定提交的值(通过value属性指定)和button上显 示的文本(通过标签的内容来指定),但仅仅能用于IE6.0以上版本号的浏览器。 
 
submit标签演示样例 
例1:指定image类型的提交button。使用method属性。 
<s:submit type=“image”  method=“login”  src=“images/login.gif” /> 
上述代码在client浏览器中的输出例如以下: 
<input type=“image” src=“images/login.gif”  name=“method:login”  value=“Submit”…./> 
注意生成的input元素的name属性。 
 
例2:指定button类型的提交button。使用action和method属性。 
<s:submit type=“button”  action=“userManager” method=“login” label=“登录” /> 
上述代码在client浏览器中的输出例如以下: 
<button type=“submit” name=“action:userManager!login” value=“submit” …/> 登录</button> 
注意button标签的name属性。

 


 
通过上面的样例能够看到name属性有二个前缀:method和action,这是struts2提供的一种特性。即使 用一些提前定义的前缀来命名一个button,通过button的名字来改变运行的行为。Struts2定义了4个前缀 ,例如以下: 
method-------method:login 
action--------action:userManager 
redirect------redirect:cancel.jsp 
redirection-action------redirect-action:register 

method   
使用method前缀,来代替action默认的execute()方法的运行。比如一个表单同一时候用于
用户注冊和登录,那么能够编写代码例如以下: 
<s:form  action=“userManager”> 
  <s:textfield  label=“用户名”  name=“user.username” /> 
  <s:password label=“密码”  name=“user.password” /> 
  <s:submit value=“登录”  name=“method:login” /> 
  <s:submit value=“注冊”  name=“method:reg” /> 
</s:form> 
 
注意:1)对于input类型的提交button,不能通过submit标签的label属性来设置提交button上的文本,仅仅能使用value属性。 
          2)能够在submit标签的name属性中直接使用method前缀。也能够像前面给出的样例中使用submit标签的method属性来指定处理请求的action方法。 

action前缀  
使用action前缀,代替form标签指定的action。将请求导向到另外的action进行处理。 
 
演示样例: 
<s:form  action=“login”> 
  <s:textfield  label=“用户名”  name=“user.username” /> 
  <s:password label=“密码”  name=“user.password” /> 
  <s:submit value=“登录” /> 
  <s:submit value=“注冊”  name=“action:register” /> 
</form> 
 
假设用户已经注冊。能够直接登录,否则单击注冊button,转到注冊页面。

action前缀也能够和struts2的动态方法调用结合使用,

比如:name=“action:userManager!register”. 

转载于:https://www.cnblogs.com/mqxnongmin/p/10776430.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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标签:生成树形结构的节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值