Struts2 标签详解(学习深入)

2023-11-05

Struts2 标签详解

详细的说明了struts2所有标签

 a 

a标签创建一个HTML超链接,等价于HTML <a  href=""....

示范代码:

<s:a href="login.action">登陆</s:a>

 action 

使用action标签 可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Actionname以及namespace。如果指定 了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。
action标签的属性:
id 可选属性,该属性将会作为该Action的引用ID
name 必填属性,指定该标签调用哪个Action
namespace 可选,指定该标签调用的Action所在的namespace.
executeResult 可选,指定是否要将Action的处理结果页面包含到本页面。默认是false,即不包含
ignoreContextParams 可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action

下面是本示例应用中的Action类,包含连个处理逻辑。代码如下

public class TagAction extednds ActionSupport
{
    //封装用户请求参数的author属性
    private String author;
    //authorgetset的方法,省略……
    public String execute() throws Exception
    {
        return   "done";
    }     

    public String login() throws Exception
    {
        ServletActionContext.getRequest().setAttribute("author",getAuthor());
        return "done";
    }
}

上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。代码如下

<package  name="lee" extends="struts-default">
    <!--定义第一个Action,使用lee.TagActionexecute方法作为处理逻辑-->
    <action name="tag1"  class="lee.TagAction">
        <result name="done">succ.jsp</result>
    </action>

    <!--定义第二个Action,使用lee.TagActionlogin方法作为处理逻辑-->
    <action  name="tag2"  class="lee.TagAction"  method=“login”>
        <result   name="done" > loginSucc.jsp </result>
    </action>
    ..............
</package>

上面配置文件将一个Action类定义成两个逻辑Action,可以在JSP页面中通过<s:action.../>标签来调用这两个逻辑Action,部分jsp代码如下:

       下面调用第一个Action,并将结果包含到本页面中。
    <s:action   name="tage1"  executeResult=“true” />
        下面调用第二个Action,并将结果包含到本页面中。<br>
        阻止本页面请求参数传入Action  <br>
    <s:action   name=“tag2”  executeResult="true"  ignoreContextParams="true" />
    </hr>
    下面调用第二个Action,且不将结果包含到本页面中。<br>
    <s: action   name="tag2"  executeResult="false" />
    <s:property   value="#attr.author"/>

上面页面中,通过指定executeResult属性来控制是否将处理结果包含到本页面中;还可以通过ignoreContextParams属性来决定是否将本页面的请求参数出入Action

 actionerror 

这个标签负责输出错误信息到客户端,例子如下:

Action代码如下:

package lee;

import com.opensymphony.xwork2.ActionSupport;
public class DemoAction extends ActionSupport
{
@Override
public String execute()
{
   addActionError("第一条错误消息!"); 
   addActionError("第二条错误消息!"); 

   return SUCCESS;
}
}

JSP页面代码如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
</head>
<body>
<s:actionerror/>
</body>
</html>

 actionmessage 

这个标签负责输出提示信息到客户端,例子如下:

Action代码如下:

package lee;

import com.opensymphony.xwork2.ActionSupport;
public class DemoAction extends ActionSupport
{
@Override
public String execute()
{
   addActionMessage("第一条普通消息!"); 
   addActionMessage("第二条普通消息!"); 
   return SUCCESS;
}
}

JSP页面代码如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
</head>
<body>
<s:actionmessage />
</body>
</html>

 append 

来做iterator标签的辅助,将不同iterator中的内容合在一个iterator中。

参数

名字

是否必须

默认值

可否使用表达式

类型

描述

id

 

String

用来保存结果iterator的对象在value context中的名字。

例子
Action
public class AppendIteratorTagAction extends ActionSupport {
 
 private List myList1;
 private List myList2;
 private List myList3;
 
 
 public String execute() throws Exception {
 
     myList1 = new ArrayList();
     myList1.add("1");
     myList1.add("2");
     myList1.add("3");
 
     myList2 = new ArrayList();
     myList2.add("a");
     myList2.add("b");
     myList2.add("c");
 
     myList3 = new ArrayList();
     myList3.add("A");
     myList3.add("B");
     myList3.add("C");
 
     return "done";
 }
 
 public List getMyList1() { return myList1; }
 public List getMyList2() { return myList2; }
 public List getMyList3() { return myList3; }
 
标签使用
<s:append id="myAppendIterator">
     <s:param value="%{myList1}" />
     <s:param value="%{myList2}" />
     <s:param value="%{myList3}" />
</s:append>
<s:iterator value="%{#myAppendIterator}">
     <s:property />
</s:iterator>

 bean 

bean标签 用于创建一个JavaBean的实例。创建JavaBean实例时,可以在标签体内使用<param.../>标签为该JavaBean实例 传入属性,要使用这个标签,需要为该JavaBean类提供对应的setter方法。如该JavaBean类提供了对应的getter方法,我们就可以访 问对应的属性。

bean标签 的属性:

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

id 可选。如指定了该属性,则该Javabean实例会被放入StackContext(不是ValueStack),从而允许直接通过该id属性来访问该JavaBean实例。


【!!注意: bean标签内时,bean标签创建的JavaBean实例放在valuestack的栈顶,该标签结束,生成的子集被移出valuestack栈。除非指定了id属性】

下面是个简单的JavaBean

public  class  Person

{

     private String name;

     private  int age;

     //gettersetter方法省略

     ……

}

jsp页面中的代码:

<!--使用bean标签创建一个lee.Person类的实例-->

<s:bean   name="lee.Person">

<!--使用Param标签为leePerson类的实例传入参数-->

<s:param   name="name"  value="'yeeku'"/>

<s:param  name="age"   value="29"/>

<s:property  value="name"/> <br>

<s: property  value="age"/>

</s:bean>

id属性的用法:

<s:bean   name="lee.Person"  id=“p”>

<!--使用Param标签为leePerson类的实例传入参数-->

<s:param   name="name"  value="'yeeku'"/>

<s:param   name="age"   value="29"/>

</s:bean>

<s:property   value="#p.name"/> <br>

<s:property   value="#p.age"/>

 checkbox 

checkbox标签输出一个HTML复选框,等价于HTML代码:<input type="checkbox" .../> 

代码 

1. <s:checkbox label="性别" name="user.sex" value="true" fieldValue="dddd"/>   

这里value的值是值,fieldValue的值才是真值。当value="true"表示这个复选框被选上。为false时不选上 
另外,它在向html转换后会多出一个隐藏域,很奇怪。上面的代码输出成html是这样的: 

代码 

1. <input type="checkbox" name="user.sex" value="dddd" checked="checked" id="saveUser_user_sex"/>   

2. <input type="hidden" name="__checkbox_user.sex" value="dddd" /> <label for="saveUser_user_sex" class="checkboxLabel">性别</label>   

 checkboxlist 

复选框

名称

必需

默认

类型

描述

fieldValue

 

 

true

 

String

 

指定在复选框选中时,实际提交的值

 

 

复选框组,对应Action中的集合

名称

必需

默认

类型

描述

list

 

 

 

Cellection Map Enumeration Iterator array

要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

listKey

String

指定集合对象中的哪个属性作为选项的value

listValue

 

 

 

String

 

指定集合对象中的哪个属性作为选项的内容

 


例子:checkboxlistTag.jsp
<%@ page contentType="text/html;charset=GBK" %>

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

<s:form>

    <s:checkboxlist name="interest" list="{'足球','篮球','排球','游泳'}" label="兴趣爱好"/>

</s:form>

 combobox 

combobox标签生成一个单行文本框和下拉列表框的结合,但两个表单元素只对应一个请求参数,只有单行文本框里的值才包含请求参数,而下拉列表框则只是用于辅助输入,并没有name属性,也就不会产生请求参数。使用该标签时,需要指定一个list属性,该list属性指定的集合将用于生成列表框。
例子如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title>使用s:combobox生成下拉输入框</title>
<s:head/>
</head>
<body>
<h3>使用s:combobox生成下拉输入框</h3>
<s:form>
    <s:combobox label="请选择您喜欢的图书" theme="css_xhtml" labelposition="top"
        list="{'Spring2.0' , 'J2EE' , 'Ajax'}"
        size="20" maxlength="20" name="book"/>
</s:form>
</body>
</html>
通过访问上面的JSP页面,我们可以看到上面的文本框,用户可以自行输入,可也以选择下面的checkbox中的内容来进行输入。需要注意的是,此时的下拉列表仅仅是用于辅助输入的,并没有任何实际意义,因此不能指定它的listKeylistValue属性。

 conponent 

conponent标签用于使用自定义标签,因为使用自定义组件还是基于主题,模板管理的,因此在使用component标签,常常需要指定如下3个属性:

theme:自定义组件所使用的主题,默认使用xhtml主题。

templateDir:指定自定义组件的主题目录,默认使用系统的主题目录,即template目录。

template:指定自定义组件所使用的模板。

此外,还可以component标签中使用param标签来注入参数的值。例子如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>使用s:component标签</title>
</head>
<body>
<h3>使用s:component标签</h3>
使用自定义主题,自定义主题目录<br> 
从Web应用根路径下加载模板,使用ftl模板。 
<s:component 
        theme="customTheme" 
        templateDir="customTemplateDir" 
        template="ftlCustomTemplate">
<s:param name="list" value="{'Spring2.0' , 'J2EE' , 'Ajax'}" />
</s:component>
<hr/>    
使用自定义主题,自定义主题目录<br> 
从Web应用根路径下加载模板,使用JSP模板。     
<s:component 
        theme="customTheme" 
        templateDir="customTemplateDir" 
        template="jspCustomTemplate.jsp">
<s:param name="list" value="{'Spring2.0' , 'J2EE' , 'Ajax'}" />
</s:component>      
<hr/>
使用默认主题(xhtml),默认主题目录(template)<br> 
从Web应用中加载模板,使用JSP模板。    
<s:component template="mytemplate.jsp">
<s:param name="list" value="{'Spring2.0' , 'J2EE' , 'Ajax'}" />
</s:component>
<hr/> 
使用自定义主题,自定义主题目录<br> 
从/WEB-INF/classes路径下加载模板,使用ftl模板。    
<s:component
theme="myTheme"
templateDir="myTemplateDir"
template="myAnotherTemplate">
<s:param name="list" value="{'Spring2.0' , 'J2EE' , 'Ajax'}" />
</s:component>
</body>
</html>

上面使用了FreeMarker和JSP模板,FreeMarker模板的ftlCustomTemplate.ftl代码如下:

<div style="background-color:#bbbbbb;">
FreeMarker自定义模板<br>
请选择您喜欢的图书<br>
<@s.select list="parameters.list"/>
</div>

JSP模板jspCustomTemplate.jsp的代码如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<div style="background-color:#eeeeee;">
<b>JSP自定义模板<br>
请选择您喜欢的图书<br></b>
<s:select list="parameters.list"/>
</div>

 date 

date标签 用于格式化输入一个日期,还可以计算指定日期和当前时刻之间的时差。

date属性:

format 可选,如指定该属性,将根据该属性指定的格式来格式化日期

nice 可选,值为true或者false,用于指定是否输出指定日期和当前时刻的时差。默认是false,即不输出

name 必填,指定要格式化的日期

id 可选,指定引用该元素的id

通常,nice属性和format属性不同时指定,(不指定nice属性时,该属性值为false)。因为指定nicetrue,代表输出指定日期和当前时刻的时差;指定format属性,则表明将指定日期按format指定的格式来个格式化输出。

如果即没有指定format,也没指定nice=“true”,则系统会到国际化资源文件中寻找keystruts.date.format的消 息,将该消息当成格式化文本来格式化日期。如果无法找到keystruts.date.format的消息,则默认采用 DateFormat.MEDIUM格式输出。

看如下jsp代码:

<%

//生成一个Date实例

java.util.Date  now  =  new  java.util.Date(107,12,23,13,23,24);

//将该Date实例设置成一个pageContext里的属性

pageContext.setAttribute("now", now);

%>

1> nice = "false",且指定format=“dd/MM/yyyy”<br>

<s:date   name="#attr.now"   format="dd/MM/yyyy"  nice=“false”/> <hr><br>

2> nice = "true",且指定format=“dd/MM/yyyy”<br>

<s:date  name="#attr.now"   format="dd/MM/yyyy"  nice=“true”/> <hr><br>

3> 指定nice = "true"<br>

<s:date   name="#attr.now"    nice=“true”/> <hr><br>

4> nice = "false",且没有指定format<br>

<s:date  name="#attr.now"   nice=“false”/> <hr><br>

当没有指定nice=“true”属性,且不指定format属性时,系统将日期格式化成“20080123,这是因为在系统的全局国际化资源文件中提供了如下一行:
#指定Struts2默认的国际化资源文件

 datetimepicker 

datetimepicker标签就是生成一个有日期控件的文本输入框。它有一个前提就是要在<head></head>内加一个"<s:head theme="ajax" />",然后可以在form内加上该标签。 
(1)、静态构造有初始值的日期输入项 

代码 

1. <s:datetimepicker name="user.birthday" label="出生日期" value="%{'2008-9-20'}"/>   


(2)、动态构造有初始值的日期输入项 

代码 

1. <s:datetimepicker name="user.birthday" label="出生日期" value="%{date}" displayFormat="yyyy-MM-dd"/>   

在给输入项动态赋初始值时,要用ONGL%{}表达式,而不能用#{}表达式。上面代码中的date变量需在action里有事选定义

 debug 

  

debug标签主要用于辅助测试,它在页面上生成一个超链接,通过该链接可以查看ValueStackStack Context 中的所有值信息。

使用debug标签只有一个id属性,这个属性仅仅是该元素一个引用id

在页面上增加<s:debug/>标签,通过debug标签,可以看的系统中ValueStack离得全部信息,并可以看到Stack Context中的属性。

示范代码:

<s:debug></s:debug>

//直接在jsp页面上面添加这样的标签,就可以生产一个查看debug信息的链接

 div 

divstruts2 ajax中最基础的标签,其他的标签均和div有关系。div的最大的用途就是可以异步的更新div中的内容。这里写一些div基本的应用,其他的等写别的标签的时候再写。通过例子说明 
    <s:div href="%{url}">Initial Content</sx:div> 
    <!--最简单的例子,从指定的url获取信息更新自己的内容--> 
        
    <s:div href="%{url}" delay="2000"/> 
    <!--delay:载入内容前等待的时间,单位毫秒--> 
    
    <s:div href="%{url}" highlightColor="red" highlightDuration=""/> 
    <!--highlightColor:载入内容的背景色 highlightDuration:背景色显示的时间--> 
    
    <img id="indicator" src="images/indicator.gif"       style="display:none"/>  
    <s:div href="%{url}" updateFreq="2000" indicator="indicator"/> 
    <!--每两秒更新一次。updateFreq为更新时间,单位毫秒。--> 
    <!--indicator为指示器,当内容未载入的显示的一个gif图片,一般为动态图片--> 

 doubleselect 

doubleselect标签输出关联的两个HTML列表框,产生联动效果。

名称

必需

默认

类型

描述

list

Cellection Map Enumeration Iterator array

要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

listKey

 

 

 

String

 

指定集合对象中的哪个属性作为选项的value,该选项只对第一个列表框起作用

listValue

 

 

 

String

 

指定集合对象中的哪个属性作为选项的内容,该选项只对第一个列表框起作用

headerKey

 

 

 

String

 

设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

headerValue

String

显示在页面中header选项内容

emptyOption

false

Boolean

 

multiple

false

Boolean

是否多选

size

Integer

显示的选项个数,该选项只对第一个列表框起作用

doubleId

String

指定第二个列表框的ID

doubleList

 

 

 

Cellection Map Enumeration Iterator array

要迭代的集合

 

doubleListKey

 

 

 

String

 

指定集合对象中的哪个属性作为选项的value,该选项只对第二个列表框起作用

doubleListValue

 

 

 

String

 

指定集合对象中的哪个属性作为选项的内容,该选项只对第二个列表框起作用

doubleSize

Integer

选项个数

doubleName

String

指定第二个列表框的name映射

doubleValue

Object

第二个列表框的初始选种项


实例:
<s:form name="test">

<s:doubleselect label="请选择所在省市"

   name="province" list="{'四川省','山东省'}" doubleName="city"

   doubleList="top == '四川省' ? {'成都市', '绵阳市'} : {'济南市', '青岛市'}" />

</s:form>

 

<s:form action="doubleselectTag">

<s:doubleselect

        label="请选择所在省市"

        name="province"

        list="provinces"

        listKey="id"

        listValue="name"

        doubleList="cities"

        doubleListKey="id"

        doubleListValue="name"

        doubleName="city"

        headerKey="-1"

        headerValue="---------- 请选择 ----------"

        emptyOption="true" />

</s:form>

 else 

else标签用来控制基本的条件处理流程,通常和if、elseif标签连用。 

参数

名字

是否必须

默认值

可否使用表达式

类型

描述

id

 

String

用来表示该元素,对于UI和Form标签来说直接转变为HTML id属性

test

 

Boolean

用来决定是否显示标签内部内容的表达式

 例子

<s:if test="%{false}">

    <div>Will Not Be Executed</div>

</s:if>

<s:elseif test="%{true}">

    <div>Will Be Executed</div>

</s:elseif>

<s:else>

    <div>Will Not Be Executed</div>

</s:else>

 elseif 

elseif标签用来控制基本的条件处理流程,通常和if、else标签连用。

参数

名字

是否必须

默认值

可否使用表达式

类型

描述

id

 

String

用来表示该元素,对于UI和Form标签来说直接转变为HTML id属性

test

 

Boolean

用来决定是否显示标签内部内容的表达式

 例子

<s:if test="%{false}">

    <div>Will Not Be Executed</div>

</s:if>

<s:elseif test="%{true}">

    <div>Will Be Executed</div>

</s:elseif>

<s:else>

    <div>Will Not Be Executed</div>

</s:else>

 fielderror 

fielderror标签输出actionfieldErrors属性保存的字段错误,fieldErrors是一个map类型的属性。

Action类中这样定义:

public String execute() throws Exception{

...

addFieldErrors("field1", "field1 error");

addFieldErrors("field2", "field2 error");

...

}

jsp中输出错误信息:

<s:fielderror/>

 file 

文件选择组建

file标签输出一个HTML文件选择框,等价于html代码:<input type="file" .../>。

名称

必需

默认

类型

描述

accept

 

 

input

 

String

 

HTML accept属性,指出接受文件的MIME类型

 

例子:
<s:file name="uploadfile" accept="text/*" />
<s:file name="uploadfile" accept="text/html,text/plain" />

 form 

form标签输出一个HTML from 

例子:

<s:form action="exampleSubmit" method="post" enctype="multipart/form-data"> 
<s:submit   /> 
     <s:reset   /> 
</s:form>

可以上传文件的form 

 

 generator 

使用generator标签可以将指定字符串按指定分隔符分成多个子串,临时生成的多个子串可以使用iterator标签来迭代输出。可以这样理解:generator将一个字符串转化成一个集合。在该标签的标签体内,整个临时生成的集合将位于ValueStack的顶端,蛋一旦该标签结束,该集合将被移出ValueStack。

属性: 

1. count :可选属性,该属性指定生成集合中元素的总数。 

2. separator :必填属性,指定用于解析字符串的分隔符。 

3. val:必填属性,指定被解析的字符串。 

4. converter:可选属性,指定一个转换器,该转换器负责将集合汇总的每个字符串转换成对象 

5. id:可选属性,如果指定了该属性,则将生成的集合放在pageContext属性中 

例1:

生成一个简单的iterator,并且使用iterator标签打印出内容。

<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}">

 <s:iterator>

     <s:property /><br/>

 </s:iterator>

</s:generator>

 

例2:

生成一个iterator,使用count属性。因为count属性值为3,所以只有前三个内容(aaa,bbb,ccc)在生成的iterator中。

Generate an iterator with count attribute

<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3">

 <s:iterator>

     <s:property /><br/>

 </s:iterator>

</s:generator>

 

例3:

生成iterator,使用了id属性,之后生成的对象放在pageContext中,可以通过指定的id来访问。

<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" />

<%

 Iterator i = (Iterator) pageContext.getAttribute("myAtt");

 while(i.hasNext()) {

     String s = (String) i.next(); 

%>

     <%= s %> <br/>

<% 

}  

%>

 

例4:

生成iterator,使用converter属性,这里的convertor仅仅将每一个对象添加了一个"converter-"前缀。

<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}">

 <s:iterator>

     <s:property /><br/>

 </s:iterator>

</s:generator>

 

public class GeneratorTagAction extends ActionSupport {

  ....

  public Converter getMyConverter() {

     return new Converter() {

         public Object convert(String value) throws Exception {

             return "converter-"+value;

         }

     };

  }

  ...

 head 

head标签主要用于成生HTML主要页面的HEAD部分。国为有些主题需要包含特定的CSSjavascript代码,而该标签则用于生成对这此CSSjavaScript代码的引用。

有属性:

1debug: 使用ajax主题时将该属性设置为true,将开启调试模式

2calendarcssjscalendar控件使用的css主题

例子:

<head>

<title>page 1</title>

<s:head/>

</head>

 hidden 

hidden标签输出一个HTML隐藏表单元素,等价于HTML代码:<input type="hidden" .../>

xhtml主题下,hidden标签与其他的标签不一样,hidden标签并不输出表行。xhtml主题直接从simple主题继承了

hidden.ftl模板。

例子:

<s:hidden name="id" value="s"/>

 i18n 

该标签用于加载资源包到值堆栈。它可以允许text标志访问任何资源包的信息,而不只当前action相关联的资源包。 
参数: 
名称必需默认类型描述valueObject/String资源包的类路径(如com.xxxx.resources.AppMsgidObject/String用来标识元素的id。在UI和表单中为HTMLid属性 例子: 
HelloWorld=Hello Wrold! 
3 classes\ ApplicationMessages.properties 

<%@ page c %> 
<%@ taglib prefix="s" uri="/struts-tags" %> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
     <head> 
         <title>Internationization</title> 
     </head> 
     <body> 
         <h3> 
             <s:i18n name="ApplicationMessages"> 
                 <s:text name="HelloWorld" /> 
             </s:i18n> 
         </h3> 
     </body> 
</html> 

 if 

If标签用来控制基本的条件处理流程,通常和else标签或者elseif标签连用。

参数

名字

是否必须

默认值

可否使用表达式

类型

描述

id

 

String

用来表示该元素,对于UI和Form标签来说直接转变为HTML id属性

test

 

Boolean

用来决定是否显示标签内部内容的表达式

 例子

<s:if test="%{false}">

    <div>Will Not Be Executed</div>

</s:if>

<s:elseif test="%{true}">

    <div>Will Be Executed</div>

</s:elseif>

<s:else>

    <div>Will Not Be Executed</div>

</s:else>

 include 

include标签 用于将一个JSP页面,或者一个Servlet包含到本页面中,
使用该标签有如下两个属性:

value 必填,指定需要被包含的JSP页面,或者Servlet
id 可选,指定该标签的ID引用

还可以为<s:include.../>标签指定多个<param.../>子标签,用于将多个参数值传入被包含的JSP页面或者Servlet

看下面代码:

<h2>使用s:include标签来包含目标页面</h2>

<s:include   value="include-file.jsp"/>

<!--使用include标签来包含其他页面,并且传入参数-->

<s:include   value="include-file.jsp">

    <s:param  name="author"  value="'yeeku'" />

</s:include>

被包含的页面仅使用表达式语言输出author参数,被包含页面的代码如下:

<h3>被包含的页面</h3>

<!--表达式语言输出author的请求参数-->

${param.author}

 inputtransferselect 

获取form的一个输入 

 iterator 

迭代处理一个java.util.Connection或者java.util.Iterator对象

参数

名字

是否必须

默认值

可否使用表达式

类型

描述

id

 

String

Id,

status

Boolean

如果指定,在循环的过程中会保留一个IteratorStatus类型的变量,该变量用来查询当前迭代的状态

value

 

String

被迭代的对象


例1:

<s:iterator value="days">

  <p>day is: <s:property/></p>

</s:iterator>

 

2

<s:bean name="org.apache.struts2.example.IteratorExample" id="it">

  <s:param name="day" value="'foo'"/>

  <s:param name="day" value="'bar'"/>

</s:bean>

<p/>

<table border="0" cellspacing="0" cellpadding="1">

<tr>

  <th>Days of the week</th>

</tr>

<p/>

<s:iterator value="#it.days" status="rowstatus">

  <tr>

    <s:if test="#rowstatus.odd == true">

      <td style="background: grey"><s:property/></td>

    </s:if>

    <s:else>

      <td><s:property/></td>

    </s:else>

  </tr>

</s:iterator>

</table>

 

3

<s:iterator value="groupDao.groups" status="groupStatus">

     <tr 

class="<s:if test="#groupStatus.odd == true ">odd</s:if><s:else>even</s:else>">

         <td><s:property value="name" /></td>

         <td><s:property value="description" /></td>

         <td>

             <s:iterator value="users" status="userStatus">

                 <s:property value="fullName" />

<s:if test="!#userStatus.last">,</s:if>

             </s:iterator>

         </td>

     </tr>

 </s:iterator>

 label 

xhtml主题下的label 标签输出两个 HTMLlabel标签(simple主题下的label标签只输出一个HTML label标签)。分别位于一行的两列,左列的label标签器提示作用,右列的label标签用于显示只读的action属性数据。

例子:

<s:label label="用户名" name="user.username"/>

上述代码再客户端浏览器里面输出如下:

<tr>

<td class="tdLabel"><label for="userManager_user_username"

class="label">用户名:</label></td>

<td><label id="userManager_user_username"

class="label"></label></td>

</tr>

如果Action实例已经创建,并且user.username有值,那么在表的右列中将显示user.username的值

 merge 

合并遍历集合出来的值,<s:append>标签用法相似。

MergeAction.java

@Override
 public String execute() throws Exception { 
  HttpServletRequest request = ServletActionContext.getRequest();
  List list1 = new ArrayList();
  list1.add("11");
  list1.add("22");
  List list2 = new ArrayList();
  list2.add("aa");
  list2.add("bb");
  List list3 = new ArrayList();
  list3.add("AA");
  list3.add("BB");
  XmxxBean xmxxBean = new XmxxBean(11 , "XMBH001" , "ERP"); 
  List list4 = new ArrayList();
  list4.add(xmxxBean);
  request.setAttribute("list1", list1);
  request.setAttribute("list2", list2);
  request.setAttribute("list3", list3);
  request.setAttribute("list4", list4);
  return "mergeTag";
 }

 

struts.xml

<action name="mergeTag" class="com.butone.struts2.taguser.MergeTagAction">
    <result name="mergeTag">/taguser/mergeTag.jsp</result>
   </action>

 

mergeTag.jsp

<s:form action="" theme="simple">
   <s:merge id="list">
    <s:param value="#request.list1"/>
    <s:param value="#request.list2"/>
    <s:param value="#request.list3"/>
    <s:param value="#request.list4"/>
   </s:merge>
   <s:iterator value="%{list}">
        <s:property/><br> 
   </s:iterator>
   <s:iterator value="#request.list4">
        <s:property value="XMXXID"/>
        <s:property value="XMMC"/>
        </s:iterator>
  </s:form>

 optgroup 

optgroup标签用于生成一个下拉列表框的选项组,因此,该标签必须放在<s:select>标签中使用,一个下拉列表框中可以包含多个选项组,因此可以在一个<s:select>标签中使用多个<s:optgroup>标签。例子代码如下:
<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title>使用s:optgroup生成下拉选择框的选项组</title>
<s:head/>
</head>
<body>
<h3>使用s:optgroup生成下拉选择框的选项组</h3>
<s:form>
<!-- 使用Map对象来生成下拉选择框的选项组 -->
<s:select label="选择您喜欢的图书"
           name="book"
           list="#{'Spring2.0':'李刚','J2EE':'','Ajax宝典':''}"
     listKey="value"
     listValue="key">
   <s:optgroup label="Rod Johnson"
           list="#{'Expert One-on-One J2EE Design and Development':'Johnson'}"
     listKey="value"
     listValue="key"/>
   <s:optgroup label="David Flanagan"
           list="#{'JavaScript: The Definitive Guide':'David'}"
     listKey="value"
     listValue="key"/>
</s:select>
</s:form>
</body>
</html>
通过浏览以上页面,我们可以看到:直接通过select标签的list属性生成的选项,是单独的选项,但通过optgroup标签的list属性生成的选项,则形成一个选项组,对于选项组的组名,是无法选择的。 

 optiontransferselect 

optiontransferselect标签创建一个选项转移列表组建,它由两个<select>标签以及它们之间的用于将选项在两个<select>之间相互移动的按钮组成。表单提交时,将提交两个列表框中选中的选项。

名称

必需

默认

类型

描述

list

 

 

 

Cellection Map Enumeration Iterator array

 

要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容,该选项只对第一个列表框起作用

listKey

 

 

 

String

 

指定集合对象中的哪个属性作为选项的value,该选项只对第一个列表框起作用

listValue

 

 

 

String

 

指定集合对象中的哪个属性作为选项的内容,该选项只对第一个列表框起作用

headerKey

 

 

 

String

 

设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

headerValue

String

显示在页面中header选项内容

multiple

false

Boolean

是否多选

size

 

 

 

Integer

 

显示的选项个数,该选项只对第一个列表框起作用

doubleId

String

指定第二个列表框的ID

doubleList

 

 

 

Cellection Map Enumeration Iterator array

要迭代的集合,使用集合中的元素来设置各个选项,如果doubleList的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容,该选项只对第二个列表框起作用

doubleListKey

 

 

 

String

 

指定集合对象中的哪个属性作为选项的value,该选项只对第二个列表框起作用

doubleListValue

 

 

 

String

 

指定集合对象中的哪个属性作为选项的内容,该选项只对第二个列表框起作用

doubleHeaderKey

 

 

 

String

 

设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

doubleHeaderVale

String

显示在页面中header选项内容

doubleEmptyOption

 

 

 

String

 

是否在第二列表框的header后面添加一个空选项

doubleMultiple

true

Boolean

是否多选

doubleSize

Integer

选项个数

doubleName

String

指定第二个列表框的name映射

doubleValue

Object

第二个列表框的初始选种项

leftTitle

String

左边列表框的标题

rightTitle

<-

String

右边列表框的标题

addToLeftLable

 

String

 

addToRightLable

 

 

 

 

addAllToLeftLable

 

 

 

 

addAllToRightLable

 

 

 

 

leftUpLabel

 

 

 

 

leftDownLabel

 

 

 

 

rightUpLabel

 

 

 

 

rightDownLabel

 

 

 

 

allowAddToLeft

 

 

 

 

allowAddToright

 

 

 

 

allowAddAllToLeft

 

 

 

 

allowAddAllToRight

 

 

 

 

allowSelectAll

Boolean

设置是否使用全部选择按钮

allowUpdownOnLeft

 

 

 

 

allowUpDownOnRight

 

 

 

 

 

例子:
<s:head/>
<s:form>
    <s:optiontransferselect
    label="最喜爱的图书"
        name="javaBook"
        list="{'《Java Web开发详解》', '《Struts 2深入详解》', '《Java快速入门》'}"
        doubleName="cBook"
        doubleList="{'《VC++深入详解》', '《C++ Primer》', '《C++程序设计语言》'}"/>
</s:form>
---------------------------
<s:form>
    <s:optiontransferselect
    label="最喜爱的图书"
        name="book1"
        leftTitle="Java图书"
        rightTitle="C/C++图书"
        list="{'《Java Web开发详解》', '《Struts 2深入详解》', '《Java快速入门》'}"
        headerKey="-1"
        headerValue="--- 请选择 ---"
        emptyOption="true"
        doubleName="book2"
        doubleList="{'《VC++深入详解》', '《C++ Primer》', '《C++程序设计语言》'}"
        doubleHeaderKey="-1"
        doubleHeaderValue="--- 请选择 ---"
        doubleEmptyOption="true"
        addToLeftLabel="向左移动"
        addToRightLabel="向右移动"
        addAllToLeftLabel="全部左移"
        addAllToRightLabel="全部右移"
        selectAllLabel="全部选择"
        leftUpLabel="向上移动"
        leftDownLabel="向下移动"
        rightUpLabel="向上移动"
        rightDownLabel="向下移动"/>
</s:form>

 param 

param标签 主要用于为其他标签提供参数

param标签属性:

name 可选,指定需要设置参数的参数名

value:   可选,指定需要设置参数的参数值

id 可选,指定引用该元素的id

用法:

<param  name="color"  value="blue" />

这里color参数的值是,blue对象的值----如果blue对象不存在,则colornull

如果要指定字符串则value=” ‘blue’ “

 password 

<s:password>标签类同于HTML<input type=”password” …>,其namelabel类同于<s:textfield>

例子:

<s:password name="password" label="密码"/> 

 

 property  

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

属性如下:

1. default 可选,如果需要输出的属性值为null,则显示的default属性指定的值 

2. escape 可选,指定是否escapeHTML代码 

3. value 可选,指定需要输出的属性值。如果没指定,默认输出ValueStack栈顶的值 

4. id 可选,指定该元素的标识 

例子:

<s:property value="username" default="游客"/>

取出栈顶对象(通常是action)的username 属性并输出,如果没有找到username属性,那么输出游客

 push 

push标签用于将某个值放到ValueStack的栈顶,可以跟简单的访问该值。

属性:

value 必填,指定需要放到ValueStack栈顶的值

id 可选,指定该标签的ID

下面代码,讲一个值放到ValueStack的栈顶,从而可以通过<s:property.../>标签来访问

代码如下:

<!--使用bean标签创建一个JavaBean实例,并将其放入Stack Context-->

<s:bean  name="lee.Person"  id="p">

   <s:param  name="name"  value="'yeeku'"/>

   <s:param   name="age"  value="29"/>

</s:bean>

<s:push   value="#p">

   <s:property   value="name"/>

   <s:propery   value="age"/>

</s:push>

 radio  

radio标签的用法与checkboxlist的用法几乎完全相同,一样可以指定label, list, listKey, listValue等属性。例子代码如下:
<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title>使用s:radio生成多个单选框</title>
<s:head/>

</head>
<body>
<h3>使用s:radio生成多个单选框</h3>
<s:form>
<!-- 使用简单集合来生成多个单选框 -->
<s:radio name="a" label="请选择您喜欢的图书" labelposition="top"
list="{'Spring2.0' , 'Spring In Action' , 'JavaScript: The Definitive Guide'}"/>
<!-- 使用简单Map对象来生成多个单选框 -->
<s:radio name="b" label="请选择您想选择出版日期" labelposition="top"
list="#{'Spring2.0':'200610' , 'J2EE':'20074' , 'Ajax':'20076'}"
listKey="key"
listValue="value"/>
<s:bean name="lee.BookService" id="bs"/>
<!-- 使用集合里放多个JavaBean实例来生成多个单选框 -->
<s:radio name="c" label="请选择您喜欢的图书" labelposition="top"
list="#bs.books"
listKey="author"
listValue="name"/>
</s:form>
</body>
</html>

 

 reset 

reset标签

reset标签输出一个重置按钮

名称

必需

默认

类型

描述

type

input

String

要使用的重置按钮的内容,input、button


例子:
<s:reset value="重置"></s:reset>

<s:reset type="button" label="重置"></s:reset>

 select 

下拉列表

s:select 标签输出一个下拉列表框,相当于HTML代码中的<select/>

名称

必需

默认

类型

描述

list

Cellection Map Enumeration Iterator array

要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

listKey

String

指定集合对象中的哪个属性作为选项的value

listValue

String

指定集合对象中的哪个属性作为选项的内容

headerKey

String

设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置

空值

headerValue

String

显示在页面中header选项内容

emptyOption

 

 

false

 

Boolean

 

是否在header选项后面添加一个空选项

multiple

false

Boolean

是否多选

size

Integer

显示的选项个数

例子:

<%@ page contentType="text/html;charset=GBK" %>

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

<h3>使用namelist属性,list属性的值是一个列表</h3>

<s:form>

    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"/>

</s:form>

 

<h3>使用namelist属性,list属性的值是一个Map</h3>

<s:form>

    <s:select label="最高学历" name="education" list="#{1:'高中',2:'大学',3:'硕士',4:'博士'}"/>

</s:form>

 

<h3>使用headerKeyheaderValue属性设置header选项</h3>

<s:form>

   <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"

       headerKey="-1" headerValue="请选择您的学历"/>

</s:form>

 

<h3>使用emptyOption属性在header选项后添加一个空的选项</h3>

<s:form>

    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"

       headerKey="-1" headerValue="请选择您的学历"

       emptyOption="true"/>

</s:form>

 

<h3>使用multiple属性设置多选</h3>

<s:form>

    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"

       headerKey="-1" headerValue="请选择您的学历"

       emptyOption="true"

       multiple="true"/>

</s:form>

 

<h3>使用size属性设置下拉框可显示的选项个数</h3>

<s:form>

    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"

       headerKey="-1" headerValue="请选择您的学历"

       emptyOption="true"

       multiple="true" size="8"/>

</s:form>

 

<h3>使用listKeylistValue属性,利用Action实例的属性(property)来设置选项的值和选项的内容</h3>

<s:form>

    <s:select label="最高学历" name="education" list="educations"

       listKey="id" listValue="name"/>

</s:form>

 set 

set标签是将某个值放到指定范围内, 比如说 student.teacher.parent.age 每次访问这个属性不仅性能低,而且代码可读性很差,为了解决这个问题,可以将这个值设置为一个新值,并且放入指定范围内。
标签属性:
name 是必填属性,是重新生成的新变量的名字 
scope 可选属性,指定新变量被放置的范围,可以接受application,session,request,page,action 5个值 没有指定默认是Stack Context 
value 可选属性,指定变量的值 如果没有指定,使用ValueStack栈顶的值赋给新变量 
id 可选属性,指定新元素的引用ID 

下面是个例子: 
<!-- 使用bean标签定义一个javaBean实例--!> 
<s:bean name="lee.Person" id="p"> 
<s:param name="name" value="zhangsan"/> 
<s:param name="age" value="29"/> 
</s:bean> 
p放入默认范围内 
<s:set value="#p" name="test"/> 
<s:property value="#test.name"/> <br> 
<s:property value="#test.age"/> <br> 
p放入application范围内。 
<s:set value="#p" name="test" scope="application"/> 
<s:property value="#attr.test.name"/> <br> 
<s:property value="#attr.test.age"/> <br> 
p放入session范围内。 
<s:set value="#p" name="test" scope="session"/> 
${sessionScope.test.name} <br> 
${sessionScope.test.age} <br> 

 sort 

对一个可以迭代的对象进行排序操作。  

参数

名字

是否必须

默认值

可否使用表达式

类型

描述

Comparator

 

java.util.Comparator

排序用的比较器

Source

 

String

排序对象

 

1:

<s:sort comparator="myComparator" source="myList">

     <s:iterator>

     <!-- do something with each sorted elements -->

     <s:property value="..." />

     </s:iterator>

</s:sort>

 

2:

<s:sort id="mySortedList" comparator="myComparator" source="myList" />

<%

   Iterator sortedIterator = (Iterator) pageContext.getAttribute("mySortedList");

   for (Iterator i = sortedIterator; i.hasNext(); ) {

     // do something with each of the sorted elements

   }

%>

 submit 

按钮

Submit标签输出一个按钮,submit标签和form标签使用可以提供异步表单提交功能。Submit标签可以输出以下三种类型的提交按钮:

Input: 等价于 HTML代码<input type=”submit”>
Image: 等价于 HTML代码 <input type="image">
Button:<button type="submit"></button>

名称

必需

默认

类型

描述

type

 

 

input

 

String

 

要使用的提交按钮的类型,有效值:input button image

src

 

 

 

String

 

为image类型的提交按钮设置图片地址。该属性对input和button类型的提交按钮无效

action

String

指定处理提交请求的action

method

String

指定处理提交请求的action的方法


实例
实例1.
<s:submit type="image" method="login" src="images/login.jpg"></s:submit>
页面输出:
<input type="image" alt="Submit" src="images/login.jpg" id="user__login" name="method:login" value="Submit"/>
 
实例2.<s:submit type="button" action="selectTag" method="login" label="登陆"></s:submit>
页面输出:
<button type="submit" id="user_selectTag_login" name="action:selectTag!login" value="Submit">登陆</button>
 
Struts2预定义的前缀:
1。method   method:login
使用method前缀,来取代action默认的execute()方法的执行。
<s:form action="user">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆" name="method:login"></s:submit>
   <s:submit value="注册" name="method:register"></s:submit>
</s:form>
 
注意:1。input类型的按钮,不能用label设置按钮上的文本,只能用value
2、action前缀
使用action前缀,取代form标签指定的action,导向到另一个action进行处理。
<s:form action="login">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆"></s:submit>
   <s:submit value="注册" name="action:register"></s:submit>
</s:form>
 
2、redirect前缀
使用redirect前缀请求重定向到其他的url,甚至可以是web英语程序外部的url。
<s:form action="login">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆"></s:submit>
   <s:submit value="搜索" name="redirect:www.google.com"></s:submit>
</s:form>
 
2、redirect-action前缀
使用redirect-action前缀请求重定向到其他的action.
<s:form action="login">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆"></s:submit>
   <s:submit value="搜索" name="redirect-action:register"></s:submit>
</s:form>

 subset 

递归iterator的一部分。

 

参数

名字

是否必须

默认值

可否使用表达式

类型

描述

count

False

 

Integer

Iterator中被递归的一部分的item的数量

Decider

 

org.apache.struts2.util.

SubsetIteratorFilter.Decider

用来判断iterator中的item是否包含在最终的subset内部

Source

 

String

Iterator的对象

Start

 

Integer

开始位置

 

例子

Java

public class MySubsetTagAction extends ActionSupport {

     public String execute() throws Exception {

        l = new ArrayList();

        l.add(new Integer(1));

        l.add(new Integer(2));

        l.add(new Integer(3));

        l.add(new Integer(4));

        l.add(new Integer(5));

        return "done";

     }

     public Integer[] getMyArray() {

        return a;

     }

     public List getMyList() {

        return l;

      }

     public Decider getMyDecider() {

     return new Decider() {

         public boolean decide(Object element) throws Exception {

             int i = ((Integer)element).intValue();

             return (((i % 2) == 0)?true:false);

         }

     };

     }

 }

<!-- s: List basic -->

   <s:subset source="myList">

      <s:iterator>

         <s:property />

      </s:iterator>

   </s:subset>

<!-- B: List with count -->

   <s:subset source="myList" count="3">

      <s:iterator>

          <s:property />

      </s:iterator>

    </s:subset>

<!--  C: List with start -->

     <s:subset source="myList" count="13" start="3">

        <s:iterator>

          <s:property />

        </s:iterator>

     </s:subset>

<!--  D: List with id -->

     <s:subset id="mySubset" source="myList" count="13" start="3" />

     <%

         Iterator i = (Iterator) pageContext.getAttribute("mySubset");

         while(i.hasNext()) {

     %>

     <%=i.next() %>

     <%  } %>

<!--  D: List with Decider -->

    <s:subset source="myList" decider="myDecider">

           <s:iterator>

                <s:property />

           </s:iterator>

    </s:subset>

 tabbedPanel 

<s:tabbedPanel>标签,用来在HTML页面中生成类似于Windows程序的Tab页,从而可以在有限的空间中放置更多的内容。tabbedPanel标签生成的Tab页的内容可以是静态的,也可以是动态的。如果是静态的,则直接指定Tab页面的内容,如果是动态的,则可以使用Ajax方式来动态加载Tab页的内容。
 tabbedPanel标签生成整个Tab框架,而tabbedPanel标签类的div子标签则生成的单独的Tab页,每个div标签生成一个Tab页。因为div标签本身是一个Ajax标签,允许内容动态改变,因此每个Tab页的内容可以动态改变。

、 创建action类,类名为DateACtion.java,包名为:com.teana.action,代码如下:

package com.teana.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;
/**
 * @author TEANA -- 2010-4-10
 * struts2 ajax submit 按钮应用
 * 窗口 首选项 > Java > 代码生成 代码和注释
 */
public class DateAction extends ActionSupport
{
 private static final long serialVersionUID = 5709206967517064698L;
 private Date now;

 public Date getNow()
 {
  return now;
 }

 public void setNow(Date now)
 {
  this.now = now;
 }
 
 public String execute() throws Exception
 {
  now = new Date();
  return SUCCESS;
 }
}

2、创建tabbedPanel.jsp页面,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>struts 2 ajax s:div</title>
    <s:head theme="ajax"/>
  </head>
  <body>
    <center>
     <br/><br/>
     <h5 style="color: purple;">struts2 s:tabbedPanel 实现AJAX效果</h5>
     <br/>
      </center>
     <s:url id="T" value="getDate.action" />
     <s:tabbedPanel id="tp1" closeButton="pane" theme="ajax" doLayout="true" selectedTab="second" labelposition="left">
      <s:div id="first" label="第一个div" theme="ajax">
       静态的DIV
      </s:div>
      <s:div name="second" label="第二个div" theme="ajax" href="%{T}" updateFreq="6000" delay="3000">
       3:每六秒钟刷新一次,但有三秒延迟
      </s:div>
     </s:tabbedPanel>
  </body>
</html>

、在struts.xml文件中配置action,代码如下:

 ……

<action name="getDate" class="com.teana.action.DateAction">
   <result>/jsp/ajax/showDate.jsp</result>
</action>

 ……

、编写showDate.jsp页面,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head></head>
  <body>
 服务器的当前时间为:<font color="red"><s:date name="now" format="yyyy-MM-dd HH:mm:ss"/></font>
  </body>
</html>

 text 

用于输出国际化消息,和i18n结合使用。

示范代码:

<s:i18n name="ApplicationMessages"> 
     <s:text name="HelloWorld" /> 
</s:i18n> 

详细情况请参考 i180n

 textarea 

Textarea标签输出一个HTML多行文本输入控件,等价于HTML代码:<textarea />

 

名称

必需

默认

类型

描述

cols

Integer

列数

rows

Integer

行数

readonly

false

Boolean

当该属性为true时,不能输入

wrap

false

Boolean

指定多行文本输入控件是否应该换行

id

 

 

 

Object/String

 

用来标识元素的id。在ui和表单中为HTML的id属性

 

 

例子:

<s:textarea name="personal" cols="10" rows="5" label="个人简历"></s:textarea>

 textfield 

单行文本框

Textfield标签输出一个HTML单行文本输入控件,等价于HTML代码<input type=”text”>

名称

必需

默认

类型

描述

maxlength

Integer

文本输入控件可以输入字符的最大长度

readonly

false

Boolean

当该属性为true时,不能输入

size

Integer

指定可视尺寸

id

 

Object/String

用来标识元素的id。在ui和表单中为HTML的id属性

 

例子:

<s:form action="register" method="post">

    <s:textfield name="username" label="用户名"></s:textfield>

</s:form>

 token 

token标签是用于防止多次提交的标签。避免了刷新页面时多次提交,如果需要该标签起作用,则应该在Struts2的配置文件中启用TokenInterceptor拦截器或TokenSessionStoreInterceptor拦截器。

token标签的实现原理是在表单中拉架一个隐藏域,每次加载该页面时,该隐藏域的值都不相同。而TokenInterceptor拦截器则拦截所有用户请求,如果两次请求时该隐藏域的值相同,则阻止表单提交。

使用该标签很简单,如下代码:

<h3>使用s:token防止重复提交</h3>
<s:form>
<s:token/>
</s:form>

从访问后产生的HTML页面的源代码可以看到如下HTML代码:

<input type="hidden" name="struts.token.name" value="struts.token"/>
<input type="hidden" name="struts.token" value="NUM1WVZQO3QTGKNZAKD7OA7C2YKWULVJ"/>

 tree 

treetreenode标签可以在页面生成一个树形结构,其中tree生成一个树形结构,treenode生成一个树节点。例子如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>使用s:trees:treenode标签生成静态树</title>
<s:head theme="ajax" debug="true"/>
</head>
<body>
<h3>使用s:trees:treenode标签生成静态树</h3>
<s:tree label="图书" id="book" theme="ajax" 
showRootGrid="true" showGrid="true" treeSelectedTopic="treeSelected">
    <s:treenode theme="ajax" label="" id="yeeku">
        <s:treenode theme="ajax" label="Spring2.0" id="spring"/>
        <s:treenode theme="ajax" label="J2EE" id="lightweight"/>
        <s:treenode theme="ajax" label="Ajax" id="ajax"/>
    </s:treenode>
    <s:treenode theme="ajax" label="David" id="David">
        <s:treenode theme="ajax" label="JavaScript: The Definitive Guide" id="javascript"/>
    </s:treenode>
    <s:treenode theme="ajax" label="Johnson" id="Johnson">
        <s:treenode theme="ajax" label="Expert One-on-One J2EE Design and Development" id="j2ee"/>
    </s:treenode>
</s:tree>
</body>
</html>

 treenode 

  

treetreenode标签可以在页面生成一个树形结构,其中tree生成一个树形结构,treenode生成一个树节点。例子如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>使用s:trees:treenode标签生成静态树</title>
<s:head theme="ajax" debug="true"/>
</head>
<body>
<h3>使用s:trees:treenode标签生成静态树</h3>
<s:tree label="图书" id="book" theme="ajax" 
showRootGrid="true" showGrid="true" treeSelectedTopic="treeSelected">
    <s:treenode theme="ajax" label="" id="yeeku">
        <s:treenode theme="ajax" label="Spring2.0" id="spring"/>
        <s:treenode theme="ajax" label="J2EE" id="lightweight"/>
        <s:treenode theme="ajax" label="Ajax" id="ajax"/>
    </s:treenode>
    <s:treenode theme="ajax" label="David" id="David">
        <s:treenode theme="ajax" label="JavaScript: The Definitive Guide" id="javascript"/>
    </s:treenode>
    <s:treenode theme="ajax" label="Johnson" id="Johnson">
        <s:treenode theme="ajax" label="Expert One-on-One J2EE Design and Development" id="j2ee"/>
    </s:treenode>
</s:tree>
</body>
</html>

 updownselect 

updownselect标签

updownselect标签创建一个带有上下移动的按钮的列表框,可以通过上下移动按钮来调整列表框的选项的位置。

名称

必需

默认

类型

描述

list

 

 

 

Cellection Map Enumeration Iterator array

要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

listKey

String

指定集合对象中的哪个属性作为选项的value

listValue

String

指定集合对象中的哪个属性作为选项的内容

headerKey

String

设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

headerValue

String

显示在页面中header选项内容

emptyOption

 

 

false

 

Boolean

 

是否在header选项后面添加一个空选项

multiple

false

Boolean

是否多选

size

Integer

显示的选项个数

moveUplabel

 

String

设置向上移动按钮上的文本

moveDownLabel

 

String

设置向下移动按钮上的文本

selectAllLabel

 

String

设置向全部选择按钮上的文本

allowMoveUp

Boolean

设置是否使用向上移动按钮

allowMoveDown

Boolean

设置是否使用向下移动按钮

allowSelectAll

Boolean

设置是否使用全部选择按钮

实例:
<s:form>
<!-- 使用简单集合来生成可上下移动选项的下拉选择框 -->
<s:updownselect name="a" label="请选择您喜欢的图书" labelposition="top"
    moveUpLabel="向上移动"
    list="{'Spring2.0宝典' , '轻量级J2EE企业应用实战' , 'JavaScript: The Definitive Guide'}"/>
  
<!-- 使用简单Map对象来生成可上下移动选项的下拉选择框
     且使用emptyOption="true"增加一个空选项-->
<s:updownselect name="b" label="请选择您想选择出版日期" labelposition="top"
    moveDownLabel="向下移动"
    list="#{'Spring2.0宝典':'2006年10月' , '轻量级J2EE企业应用实战':'2007月4月' , '基于J2EE的Ajax宝典':'2007年6月'}"
    listKey="key"
    emptyOption="true"
    listValue="value"/>
   
<s:bean name="com.zhaosoft.ui.formtag.BookService" id="bs"/>
<!-- 使用集合里放多个JavaBean实例来可上下移动选项的生成下拉选择框 -->
<s:updownselect name="c" label="请选择您喜欢的图书的作者" labelposition="top"
    selectAllLabel="全部选择" multiple="true"
    list="#bs.books"
    listKey="author"
    listValue="name"/>
</s:form>
 
package com.zhaosoft.ui.formtag;
public class BookService
{
    public Book[] getBooks()
    {
       return new Book[]
       {
           new Book("Spring2.0宝典","zhaosoft"),
           new Book("轻量级J2EE企业应用实战","zhaosoft"),
           new Book("基于J2EE的Ajax宝典","zhaosoft")
       };
    }
}

 url 

url标签 用于生成一个URL地址,可以通过paramurl标签指定参数,从而指定URL发送请求参数。

url标签的属性:

includeParams 可选,指定是否包含请求参数。该属性的属性值只能为noneget或者all

scheme 可选,用于设置scheme属性

value 可选,指定生成URL的地址。如果不提供就用action属性指定的Action作为URL地址值。

action 可选,指定生成URL的地址为哪个Action,如果Action不提供,就使用value作为URL的地址值。

namespace 可选,该属性指定命名空间

method 可选,指定使用Action的方法

encode 这是一个可选属性,指定是否需要encode请求参数

includeContext 可选,指定是否需要将当前上下文包含在URL地址中。

anchor 可选,指定URL的描点。

id 可选,指定该url元素的引用id

action属性和value属性的作用大致相同。指定action属性,系统会在指定属性后加.action后缀。如果两个都没有指定,就以当前页作为URL的地址值。

实例代码如下:

只指定value属性:<br>

<s:url  value="editGadget.action"/>

<hr>

指定action属性,且使用param传入参数的形式。<br>

<s:url  action="showbook">

    <s:param  name="author"  value="'yeeku'">

</s:url>

既不指定action属性,也不指定value属性,且使用param传入参数的形式。<br>

<s:url  includeParams="get" >

     <s:param  name="id"  value="%{'22'}" />   <!--这里%{  } 有疑问 -->

</s:url>

<hr>

同时指定action属性和value属性,且使用param传入参数的形式<br>

<s:url  action="showBooke"  value="xxxx">

    <s:param  name="author"  value="'yeeku'" />

</s:url>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Struts2 标签详解(学习深入) 的相关文章

  • ThinkPHP5之多语言切换

    T和inkPHP5的多语言切换是个人比较欣赏的一点 真是佩服设计者 怎么想到多语言切换的 在实际开发过程中 往往不是单一语言的项目 涉及多语言的使用 这时需要多语言切换 关键函数 Lang setAllowLangList 多语言的切换函数
  • javascript 连接 mqtt

    javascript 连接 mqtt mqtt 服务需支持websocket连接 基于 mqttws31 js 及 MqttX js var mqttOpts id 123456789 host d iyanhong com port 90
  • 在服务器上发布静态界面

    需求 朋友要把自己的简历发布在服务器上面 通告域名就可以直接访问 1 安装tomact 地址 http mirrors tuna tsinghua edu cn apache tomcat tomcat 8 v8 5 47 bin apac
  • 移动端的屏幕分辨率与浏览器的视口宽度(视口大小)是两回事儿

    问 在移动端的Web设计中 屏幕的分辨率和视口大小是不是是两回事儿 答 是的 屏幕的分辨率和视口大小在移动端的Web设计中是两个不同的概念 屏幕分辨率 Screen Resolution 这指的是移动设备屏幕上的像素数量 通常以水平像素数和
  • Struts2 标签详解(学习深入)

    Struts2 标签详解 详细的说明了struts2所有标签 a a标签创建一个HTML超链接 等价于HTML 的
  • 2020软件测试学科全套上课视频教程网盘免费分享

    软件测试学科全套上课视频教程网盘免费分享 合计50余天 以下是2020软件测试学习路线 为知名的培训机构视频 笔记源码分享给大家 里面可能会有瑕疵 望见谅 是小编自己在官网下载整理出来的 整理不易 分享给大家 请大家按照以下的学习线路学习
  • springBoot项目与Eureka注册中心整合时候关于版本兼容问题

    java lang NoSuchMethodError org springframework boot builder SpringApplicationBuilder Ljava lang Object V 如果在搭建springboo
  • 细说MVC、桌面客户端应用软件和WPF

    MVC开发框架相比较于类似ASP这种翻译脚本语言来讲 已经让广大的Web开发者有了足够的兴奋点 它使得Web开发更加简单和规范 那么接下来的桌面应用软件呢 Kevin Hoffman在Cocoa下的MVC框架和WPF的嵌入式开发有很好的经验
  • 为近期招聘.Net开发组长编写的面试题

    1 谈谈ASP Net中GridView控件和Repeater控件有什么异同 它们之间各有什么优势 2 请编程遍历页面上所有TextBox控件并给它赋值为空字符串 3 利用正则表达式编写一个邮箱验证函数 4 谈谈对C 关键字Volatile
  • 20个最炫HTML5,jQuery和CSS3下拉菜单制作教程(附示例/源码)

    3 Level Navigation Menu 三级导航菜单 独具特色的导航菜单 包含CSS3渐变 多个子菜单和jQuery动画 CSS3 Minimalistic Navigation Menu 一个简单的CSS3动画导航菜单 SLIDE
  • Java各类在线API

    JavaTM Platform Enterprise Edition v 5 0 http java sun com javaee 5 docs api 1 Hibernate API Documentation 3 2 2 ga http
  • 前端web开发的MVC模式

    MVC概论起初来之桌面应用开发 其实java的structs框架最能体现MVC框架 model模型是理解成服务器端的模块程序 view为发送给客服端的内容 Controller为servlet程序控制跳转和工作流 随着前端Ajax兴起 前端
  • 漂亮的登录界面中的css示意图

    效果图 示意图 html div class login Box img src images user png alt h3 登录 h3 div
  • 分页插件pagehelper配置和 使用;

    先看结论 在看代码是实现 代码就这么多 现在来看配置 配置 1 pom xml加入这个依赖 com github pagehelper pagehelper 3 7 5 com github jsqlparser jsqlparser 0
  • Vue.js快速入门 (cdn引入)

    文章目录 一 Vue基础 1 1 渐进式框架 1 2 第一个Vue程序 1 3 el 挂载点 1 4 data 数据对象 二 Vue 指令 2 1 v text 文本值 2 2 v html 标签元素 2 3 v on 绑定事件 2 4 v
  • 在前端页面下拉框动态显示数据库查询出来的结果,供客户勾选,限制客户自建字段(java版)

    最终效果 案例 前端代码 首先引入标签库jar和html代码 div class form group div
  • 问题解决:io.lettuce.core.RedisCommandTimeoutException: Command timed out after

    环境 spring boot starter 2 x 和 sprig data starter data redis 2 x 在使用 connection bRPop timeout rawKey 方法时 如果这里的timeout大于spr
  • 2021前端开发面试题:面试中该如何与HR谈薪资?

    问题 面试中该如何与HR谈薪资 解析 HR与你谈论薪资经常有如下套路 HR 您期望的薪资是多少 你 25K OK 你已经被HR成功套路 这个时候你的最高价就是25K了 然后HR会顺着这个价往下砍 所以你最终的薪资 般都会低于25K 等你接到
  • CSS 资源大全中文版

    预处理器 更快地编译 CSS GCSS 一个用GO语言编写的CSS预处理器 官网 LESS 向下兼容CSS并为当前的CSS增加额外的功能 官网 Myth 只用写纯CSS而不用担心浏览器加载缓慢 官网 PCSS 一个用Python语言编写的C
  • MVC三层架构

    1 MVC三层架构 MVC Model View Controller 是一种常见的软件设计模式 用于组织和管理应用程序的代码和逻辑 它将应用程序分为三个主要部分 模型 Model 视图 View 和控制器 Controller 每个部分都

随机推荐

  • 【unity设置】导入hdr图并设置为天空盒

    在IBL笔记前 我们都知道IBL是通过环境来作为间接全局光赋予irradiance 那么首先我们需要导入一张hdr图并将其设置为环境贴图 天空盒 这种图片多的小tips放在正文中过于臃肿 这边还是单独拿出来一篇小笔记 1 下载HDR贴图 首
  • 解答:x86架构下,页面大小为什么是4K?

    前提 32位逻辑地址空间的计算机系统 三级页表 每个页中每个条目占4Byte 即32位的数据 以上前提是目前x86架构32位系统的真实情况 设 页大小为X byte 则 X 4就是每个页中可以存取的条目个数 两级页表的地址转化关系如图1所示
  • Java入门需要了解(集合工具类-三十三)

    集合工具类目录 集合工具类的作用 Collections Collections排序 被排序的类实现Comparable接口方式排序 使用比较器Comparator方式排序 逆序排序 Collections二分查找 Collections获
  • charles抓包

    charles抓包 charles抓https包 参考这个来配置 https blog csdn net qq 20113327 article details 122299433 下载 安装 然后就是配置 抓包原理就是手机用电脑的网络走代
  • 计算机网络分类及其(从多角度分类)主要特点

    一 按照网络的覆盖范围进行分类 从网络的覆盖范围进行分类 计算机网络可以分为局域网 广域网和城域网 1 局域网 局域网是在局部区域范围内将计算机 外设和通信设备通过高速通信线路互连起来的网络系统 常见于一栋大楼 一个校园或一个企业内 局域网
  • 冯·诺依曼、哈佛、改进型哈佛体系结构解析

    在如今的CPU中 由于Catch的存在 这些概念已经被模糊了 个人认为去区分他们并没有什么意义 仅作为知识点 哈佛结构设计复杂 但效率高 冯诺依曼结构则比较简单 但也比较慢 CPU厂商为了提高处理速度 在CPU内增加了高速缓存 也基于同样的
  • 密码学之密匙交换

    最近在学习网易公开课上可汗学院现代密码学的课程 整理了一下自己的笔记2 迪菲 赫尔曼密匙交换 迪菲 赫尔曼密匙交换利用了单向函数正向求解很简单 反向求解很复杂的特性 n x mod m s 已知n x m求s简单 已知n m s求x很难 此
  • html5中的localStorage 临时存储

    localStorage 临时存储 localStorage 用于长久保存整个网站的数据 只支持 string 类型的存储 容量一般在2 5Mb左右 保存的数据没有过期时间 直到手动去删除 而sessionStorage在网页回话结束时失效
  • 一个“程序员的自我修养”是什么?

    在 喜剧之王 中 周星驰扮演的尹天仇 一直梦想成为一名演员 而他不管是在扮演跑龙套 或者在街坊中开设演员训练班 亦或成为主角时 他对待演员的态度 始终是认真 热爱而又投入的 而那一本他随身携带的书 演员的自我修养 尽管不知道里面具体写的是什
  • Transformer warning: [encoder.embed_tokens.weight] is newly initialized

    在使用transformer 加载预训练的T5 encoder参数的时候 经常会出现 Some weights of T5EncoderModel were not initialized from the model checkpoint
  • Vue下载文件不成功及下载文件名称问题

    看代码 import axiosDown from axios downloadFile path return axiosDown url path method get responseType blob 这一步也很关键 一定要加上 r
  • Qt对动态库(*.dll)的封装以及使用

    创建工程 首先先择左侧项目的Library 再选择右侧的C Library库然后点击下一步 接下来需要设置工程名以及路径 点击下一步 下一步即可 这里需要设置Type为共享库Shared Library 并设置类名 然后一路默认即可 工程结
  • Fluid-数据缓存亲和性调度原理解析

    前言 在Fluid中 Dataset资源对象中所定义的远程文件是可被调度的 这意味着你能够像管理你的Pod一样管理远程文件缓存在Kubernetes集群上的存放位置 另外 Fluid同样支持对于应用的数据缓存亲和性调度 这种调度方式将应用
  • Windows——python版本的OpenCV的安装方法

    1 点进OpenCV的python版本下载网站 https pypi org project opencv python 2 点击历史版本 3 找到合适的版本 复制命令 4 打开cmd 粘贴已复制的命令
  • python中的异常处理方法

    目录 1 什么是异常 3 异常的分类 4 异常的类型 有很多 不一一列举 异常处理实操 基本语法结构 异常处理了解操作 1 什么是异常 代码运行出错之后就是异常 异常会导致程序立刻停止 是我们以后在编程过程中需要极力避免的情况 异常的外号
  • 爬虫之xpath插件下载与使用

    文章目录 1 下载xpath文件 2 打开chrome浏览器 3 点击右上角小圆点 4 更多工具 阔展程序 5 拖拽xpath插件放到阔展程序 6 如果失效 需要将后缀改为zip 7 再次拖拽 8 关闭浏览器重新打开 9 按ctrl shi
  • Pycharm连接Mysql8.0的坑

    Pycharm连接Mysql8 0 1 错误 S1009 The connection property zeroDateTimeBehavior acceptable values are CONVERT TO NULL EXCEPTIO
  • 数据数仓的三种建模方式

    所谓水无定势 兵无常法 不同的行业 有不同行业的特点 因此 从业务角度看 其相应的数据模型是千差万别的 目前业界较为主流的是数据仓库厂商主要是 IBM 和 NCR 这两家公司的除了能够提供较为强大的数据仓库平台之外 也有各自的针对某个行业的
  • 新基建时期助力打造数字化智慧交通体系

    在没多久之前公布的政府工作报告中 明晰了将重点扶持 两新一重 基础建设的战略方针 并且对 两新一重 体系的实际价值给出了 既促消费惠民生又调结构增后劲 的评价 两新一重 体系包含三个基础建设方向 即增强新型基础设施建设 发展新一代的信息网络
  • Struts2 标签详解(学习深入)

    Struts2 标签详解 详细的说明了struts2所有标签 a a标签创建一个HTML超链接 等价于HTML 的