1.append标签


使用append标签可以把多个集合对象连接起来,从而组成了一个新的集合,然后通过iterator标签进行迭代输出
id:定义连接后新集合的名字
param:子标签,每个子标签指定一个集合

2.merge标签


与append标签所实现的功能一样,也是将多个集合连接成一个新的集合,但是这两个标签连接生成的新集合中,元素的排列方式有所不同。

3.index.jsp


<body>
<s:append id="newList_append">
<s:param value="{'集合1中的元素1','集合1中元素2','集合1中的元素3'}"/>
<s:param value="{'集合2中的元素1','集合2中的元素2','集合2中元素3'}"/>
</s:append>
<s:merge id="newList_merge">
<s:param value="{'集合1中的元素1','集合1中的元素2','集合1中的元素3'}"/>
<s:param value="{'集合2中的元素1','集合2中的元素2','集合2中的元素3'}"/>
</s:merge>
<h3 style="color:green">
迭代输出由append标签产生的新集合
</h3>
<s:iterator value="#newList_append" status="st">
<ul
<s:if test="#st.odd">style="color:blue;width:400px;height:20px;"</s:if>>
<li style="width: 400px; height: 20px;">
<s:property/>
</li>
</ul>
</s:iterator>
<h3 style="color:green">
迭代输出由append标签产生的新集合
</h3>
<s:iterator value="#newList_merge" status="st">
<ul
<s:if test="#st.odd">style="color:blue;width:400px;height:20px;"</s:if>>
<li style="width: 400px; height: 20px;">
<s:property/>
</li>
</ul>
</s:iterator>
</body>

4.访问
--http://localhost:8080/Struts2_Tags/index.jsp
可以看到 merge集合中的元素 是交叉的  类似  map
append中的集合是有序的  类似 list

5.generator标签


generator标签用于将指定的字符串解析成一个集合,解析时需要指定分隔符。
generator标签有如下属性:
id: 如果指定该属性,则生成一个集合放在 pageContext属性中。
count:该属性用来指定集合中最多生成的几个元素,多余内容将被忽略,如果不指定该属性,则默认元素个数是无限制的
separator:该属性用来指定解析字符串的分隔符。
val:该属性用来指定被解析的字符串
converter:该属性用来指定一个转换器,该转换器负责将集合中的每个字符串转换成对象。

generatorTag.jsp


<s:generator separator=";" val="'姓名:小气;性别:男;年龄:24;爱好:没有'" count="3">
<!--由于这里只有一个集合  所以不用指定什么  -->
<s:iterator>
<s:property/><br/>
</s:iterator>
</s:generator>

6.subset标签


subset:标签用于从一个集合中截取,从而产生一个新的集合, 使用该标签是可以知道一下几个属性:
source:可选属性 该属性用来指定源集合
count:可选属性,该属性用来指定自己和中元素的个数,如果不指定,则默认取得元集合中的额所有元素。
start:可选属性,该属性用来指定从源集合的第几个元素开始截取
decider:可选属性,该属性用来指定是否选中当前元素。

subsetTag.jsp


<body>
<s:set name="myList" value="{'红楼梦','三国演义','水浒传','西游记'}"></s:set>
<s:subset source="myList" count="2" start="1" decider="西">
<s:iterator status="st">
<s:property value="#st.getIndex()"/>
<s:property/>
</s:iterator>
</s:subset>
</body>

--使用 decidor 属性 筛选元素


package com.sh.action;
import org.apache.struts2.util.SubsetIteratorFilter.Decider;
public class NewDecider implements Decider {
public boolean decide(Object object) throws Exception {
// TODO Auto-generated method stub
String content=(String)object;
if(content.contains("国")){
return true;
}else{
return false;
}
}
}

--访问的结果为
0 三国演义 1 水浒传
subsetTag2.jsp


<body>
<s:set name="myList" value="{'红楼梦','三国演义','水浒传','西游记','大秦帝国','康熙大帝'}"></s:set>
<s:bean id="newDecider" name="com.sh.action.NewDecider"/>
<s:subset source="myList" decider="newDecider">
<s:iterator status="st">
<s:property value="#st.getIndex()"/>
<s:property/>
</s:iterator>
</s:subset>
</body>

--访问的结果为
0 三国演义 1 大秦帝国

7.sort标签


sort:标签用来对指定的集合进行排序,但是排序规则要有开发者提供,即实现自己的compatator实例,Comparrator是通过实现java.util.comparator接口来实现
可以指定的属性为
compatator:必选属性,用来指定实现排序规则的Comparator实例
source:可选属性,用来指定将要排序的集合。

定义 排序规则NewComparator.java


package com.sh.action;
import java.util.Comparator;
public class NewComparator implements Comparator{
public int compare(Object o1, Object o2) {
int i=Integer.parseInt((String)o2)-Integer.parseInt((String)o1);
return i;
}
}

sortTag.jsp


<body>
<s:set name="myList" value="{'2007','2010','2009','2011','2008','2012'}"></s:set>
<s:bean id="newComparator" name="com.sh.action.NewComparator"/>
<s:sort comparator="#newComparator" source="#myList">
<s:iterator status="st">
<s:property value="#st.getIndex()"/>
<s:property/>
</s:iterator>
</s:sort>
</body>

--访问后
--0 2012 1 2011 2 2010 3 2009 4 2008 5 2007

8.property标签


property:用于输出value的属性指定的额值
该标签有如下几个属性
default:用来指定当属性值为 null 输出的值
escape:用来指定是否显示标签代码,不显示则指定为false。
value:用来指定要输出的属性值
id:用来指定元素的引用id

propertyTag.jsp


<body>
<% session.setAttribute("param1","value1");
request.setAttribute("param2","value2");
%>
<s:property value="#session.param1" escape="true"/><br/>
<s:property value="#request.param2"/><br/>
<s:property value="#session['param1']"/><br/>
<s:property value="#request['param2']"/><br/>
<s:property default="defaultValue" value="s"/>
</body>

9.set标签


set:用来定义一个新的变量,并把一个已有的变量值复制给这个新的变量,同事可以把这个新的变量值放到指定的范围
该标签的属性有:
name:用来定义新的变量名字
scope:用来定义新变量的使用范围 可选值有:application session request response page action
value: 用来定义该元素引用的id

setTag.jsp


<body>
<h2>Struts2 Set tag 示例</h2>
<s:set name="technologyName"  value="%{'Strus 2'}"></s:set>
Technology name:
<span style="color:green">
<s:property value="#technologyName"/>
</span>
<br/>
<h2>使用set 设置一个新的变量</h2>
<s:bean name="com.sh.pojo.User" id="u">
<s:param name="name" value="'活女神'"/>
</s:bean>
scope属性值为 action范围
<span style="color:green">
<s:set value="#u" name="user" scope="action"/>
<s:property value="#attr.user.name"/>
</span>
<br/>
scope属性值为session范围:
<span style="color:green">
<s:set scope="session" value="#u" name="user"/>
<s:property value="#session.user.name"/>
</span>
</body>

--访问
--http://localhost:8080/Struts2_Tags/setTag.jsp
--出现下面的
Struts2 Set tag 示例
Technology name: Strus 2
使用set 设置一个新的变量
scope属性值为 action范围 活女神   
scope属性值为session范围: 活女神

10 date标签


date:标签用来按指定的格式输出一个日期,还可以计算指定日期到当前时间的时差,该标签主要有如下一些属性:
format:用来指定日期格式化
nice:指定是否输出指定日期与当前时间的时差,默认值为false,即不输入时差。
name:用来指定要被格式化的日期值
id:用来指定该元素的引用id

DateAction.java


package com.sh.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class DateAction extends ActionSupport {
private Date currentDate=new Date();
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}

dateTag.jsp

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 如果 注解的action配置改变时候不需要重新启动tomcate -->
<constant name="struts.devMode" value="true"/>
<constant name="struts.convention.classes.reload" value="true" />
<package name="default" extends="struts-default">
<action name="dateAction" class="com.sh.action.DateAction">
<result>/dateTag.jsp</result>
</action>
</package>
</struts>

11 action标签


action:标签允许在jsp页面中直接调用Action,要嗲用Action 就需要指定Action中的name和namespace属性。下面是Action标签的主要属性
id:可选属性,用来指定被调用的action的引用id
name:必选属性,用来指定被调用Actin的名字
namespace:可选属性,该属性用来指定被调用Action所在的namespace
executeResult:可选属性,用来指定是否将Action的处理结果包含到当前页面中,该属性的默认值为false  即 不包含。
ignoreContextParams:可选属性,用来指定单曲页面中的参数是否需要传递给调用的Action,该属性的默认值为false,即默认页面中的参数传递给被调用的Action

TestAction .java


package com.sh.action;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
private String bookName;
private double bookPrice;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
public String showBook(){
return SUCCESS;
}
//get set
}

struts.xml

<action name="test1" class="com.sh.action.TestAction">
<result>/execute.jsp</result>
</action>
<action name="test2" class="com.sh.action.TestAction" method="showBook">
<result>/showBook.jsp</result>
</action>

execute.jsp


<body>
<h2>调用了TestAction中的Execute()方法</h2>
</body>

showbook.jsp


<body>
<h2>调用了TestAction中showBook</h2>
图书名称:<s:property value="bookName"/>
图书价格:<s:property value="bookPrice"/>
</body>

action.jsp


<body>
<h2>调用了test1 并将Action的处理结果包含到页面中</h2>
<s:action name="test1" executeResult="true"></s:action>
<br/>
<h2>调用了test2 并将Action的处理结果包含到页面中,同时将页面的请求参数传入到Action</h2>
<s:action name="test2" executeResult="true" ignoreContextParams="false"></s:action>
<br/>
<h2>调用了test2 并将Action的处理结果包含到页面中 但不将页面的请求参数传递到Action</h2>
<s:action name="test2" executeResult="true" ignoreContextParams="true"></s:action>
<br/>
<h2>调用了test2 但不将Action的处理结果包含到页面中</h2>
<s:action name="test2" executeResult="false"></s:action>
</body>

//访问
--http://localhost:8080/Struts2_Tags/action.jsp?bookName=黑客帝国&bookPrice=36.0
---可以看到 如下的结果


调用了test1 并将Action的处理结果包含到页面中
调用了TestAction中的Execute()方法
调用了test2 并将Action的处理结果包含到页面中,同时将页面的请求参数传入到Action
调用了TestAction中showBook
图书名称:黑客帝国 图书价格:36.0
调用了test2 并将Action的处理结果包含到页面中 但不将页面的请求参数传递到Action
调用了TestAction中showBook
图书名称: 图书价格:0.0
调用了test2 但不将Action的处理结果包含到页面中

12 bean标签


bean:标签用于在当前页面中创建javaBean实例对象,在使用标签穿件javaBean对象时,可以嵌套param标签,为该javaBean标签实例指定属性值。
该标签主要有以下两个属性:
name:必选属性 用来指定可以实例化javabean的实现类
ie:可选属性,如果指定该属性,就可以直接通过id来访问这个javaBean实例。
使用bean标签创建javabean实例时,还可以使用param 标签为该实例传递参数,不过这需要在javabean中传递的参数进行封装。

<body>
<h2>Bean标签的使用 </h2>
<s:bean name="com.sh.pojo.User" id="user">
<s:param name="name">SMITH</s:param>
<s:property value="name"/>
</s:bean>
</body>

--访问
--http://localhost:8080/Struts2_Tags/beanTag.jsp
就可以看到初始化的值 打印数了SMITH

13 include标签


include标签用来在当前页面中包含一个jsp页面或者 Servlet 文件
该标签的属性:
id:指定该标签的应用id
value:指定被包含的jsp页面或菏泽Servlet

showDate.jsp


<body>
下面是showDate.jsp页面输出的时间<br/>
<% out.print(new Date()); %>
</body>

include.jsp


<body>
<s:include value="showDate.jsp"></s:include>
</body>

--访问
--http://localhost:8080/Struts2_Tags/include.jsp
--会看到时间会显示出来

14 param标签


param:标签用来为其他标签提供参数。该标签有如下属性:
name:指定 参数名:
value:指定参数值
param:标签的使用语法格式有两种,如下
1:<s:param name="参数名" value="参数值"></s:param>
2:<s:param name="参数名">参数值</s:param>

<body>
<h2>Bean标签的使用 </h2>
====使用第一种格式=====<br/>
<s:bean name="com.sh.pojo.User" id="user">
<s:param name="name">SMITH</s:param>
<s:property value="name"/>
</s:bean><br/>
===使用第二种格式=====<br/>
<s:bean name="com.sh.pojo.User" id="user1">
<s:param name="name" value="'SCOTT'"></s:param>
<s:property value="name"/>
</s:bean>
</body>

15 push标签


push:标签用来将某个值存放到ValueStack的栈顶中。这样可以使访问这个值变得更简单。 该标签的是属性有:
id:指定该标签的引用id
value:指定需要放到ValueStack栈顶的值。

<body>
<h2>Push标签的使用 </h2>
<s:bean name="com.sh.pojo.User" id="user">
<s:param name="name">SMITH</s:param>
<s:property value="name"/>
</s:bean><br/>
===普通的访问格式<br/>
<s:property value="#user.name"/><br/>
===使用push标签后的访问方式<br/>
<s:push value="user">
<s:property value="name"/>
</s:push>
</body>

16 url标签


url:标签用来生成一个URL地址,也可以通过嵌套param标签来为URL指定参数,
该标签的主要属性 如下:
includeParams:用来指定是否请求参数,有3个值可以选参数 none,get(包括get请求的所有参数), all(会包括post请求的参数)
value:用来指定URL的地址值(如果没有这个值 将使用action的值作为Url地址)
action:用来指定一个Action作为URL的地址值
nameSpace:该属性用来指定命名空间。
method:用来指定调用Action方法名。
encode:用来指定是否encode请求参数
includeContext:用来指定是否将当前上下文包含在URL地址值中。
id:用来指定URL元素的引用ID。
(注意:如果value 和action 都有值)

<body>
<h2>指定value属性,并使用param标签传递参数</h2><br>
<s:url value="index.jsp">
<s:param name="name">xiaoqi</s:param>
</s:url><br>
<h2>指定action属性,并设置includeParam="none",不包含请求的参数</h2><br>
<s:url action="test1.action" includeParams="none"/><br>
<h2>同时指定value属性和action属性</h2><br>
<s:url value="index.jsp" action="test2.action" includeParams="get">
</s:url><br>
<h2>即不指定value属性也不指定Actoin属性</h2><br>
<s:url>
<s:param name="name">xiaoqi</s:param>
</s:url>
<br>
</body>

17 表单标签的通用属性


1.模板相关的属性
templateDir:用来指定标签使用的模板文件的目录
theme:用来指定标签使用的主题。theme:属性有如下可选值:simple,ajax,  css_html,xhtml。 默认值为xhtml
template:用来指定标签使用的模版
2.javaScript 相关属性
tooltip:相关属性。这些属性用来为表单元素设置提示信息,当鼠标悬停在相应元素上时就出现提示内容,tooltip相关属性包括itooltip ooltiplcon,tooltipBorderColor,tooltipFontColor 和 tooltipFontSize等
事件属性:事件包括鼠标事件,键盘事件,焦点事件等。这些事件的属性有很多是常见的:例如  onlcik ondbclick,on从mousedown,onmouseup,onmouseover onmouseout onfocus onblur onkeypress onkeyup onkeydown onselect onchange等
3.通用属性
title:用来设置表单元素的title属性
disabled:用来设置表单元素是否可用
lable:设置表单元素lable属性
labelPositino:用来设置表单元素的label显示的位置,可选值有top left 默认值为left
name:设置表单元素的name,该属性值与Action中属性名对应
value:这是表单元素的值
cssClass:设置表单元素的class
cssStue:设置表单元素的style属性
required:设置表单元素为必填项
requiredPosition:设置必填标记 (默认为*) 相对于label元素的位置,可选只有left left 默认值为right
tabindex:设置该表单元素的tabindex属性
name 和value 属性
name:属性除了为html表单元素指定名字,在表达提交的时候作为请求的参数的名字外,同时还映射到Action的属性。 在大多数情况下,那么属性映射到一个JavaBean属性,例如 name属性为userName,在表单提交后Sturts2框架会调用Action的setUserName()方法来设置属性。
如果希望在表单元素中显示Action属性的数据,这是可以使用vale
属性,为value属性指定表达式 %{userName},这将调用getUserName()方法,并在表单中显示返回的数据
<s:form action="updateUser">
<s:textfield lable="用户名" name="userName" value="%{userName}"/>
</s:form>
id:Struts2 中所有的表单标签会自动给Html表单元素分配一个id属性,根据需要,这个属性可以被覆盖
对于表单本身,默认的id是action的名字,例如 updasteUser
对于表单元素,默认的id是表单名字_表单元素的名字 例如
updateUser_userName

18 form 标签

名称 必须 默认值 说明
action 当前的Action 提交的action名字,不需要添加.ation后缀
namespace 当前的命名空间 提交的action所属的命名空间
method post html表单的method属性 取值为get 或者post
enctype 上传文件时,设置为multipart/form-date
focesElement 指定为某个表单的元素id,当页面加载时,该元素将具有焦点
validate 是否执行客户端验证,只有使用xhmlt或者ajax主题时才有效

--说明


1.如果是输出标的请求和提交表单的请求,属于不通的命名空间,那么可以通过namespace属性指定处理表单提交的action属性的命名空间。
如果当前输出标的请求和提交标的请求属于同一个命名空间,可以不是哟好难过namespace属性。
2.如果建该表提交给Action中的默认execute()方法,那么form标签的action属性可以忽略。例如 <s:form></s:from> 那么当访问/register!default.action时候,将自动为form标签的Action属性设置为register 然后交给aciotn中的execute()方法处理。
3.但使用验证框架是,将form标签的validate属性设置为true,建自动生成客户端javaScript交易代码。
4.method 和 enctyp 属性是html form 标签的属性。

19 submit 标签


submit:主要是输出一个提交按钮。通过该标签可以输出一下3种类型的提交按钮:
input:等价 html代码 <input type="submit">
image 等价 html代码 <input type="image">
button 等价 html代码 <input type="submit">
除了公共属性外,submit标签还可以指定一下属性:
type:提交按钮的类型,有效值为 input image button
src:为image 类型提供按钮设置图片地址
action:指定处理请求的action
method:指定处理请求的action方法。

案例


例如: 指定image类型的提交按钮,使用method属性,如下:
<s:submit type="image" method="login" src="data:images/login.gif"/> 上述代码在客户端浏览器的源文件中,显示为如下内容:
<iput type="image" name="method:login" src="data:images/login.gif" value="Submit"/>
例如: 指定 button 类型的提交按钮,使用action和method属性,如下;
<s:submit type="button" method="login" action="userLogin" lable="用户登录"/> 上述代码在客户端浏览器中的源文件中,显示如下内容:
<buttom type="submit" name="action:userLogin!login" value="Submit">用户登录</buttom>

预定义的前缀


在上面的两个示例中,name属性值分别有两个前缀,method和action,这是Struts2框架提供的一种特性,即使用一些预定义的前缀来命名一个按钮,通过按钮的名字来改变执行的行为。
Struts2框架定义4个前缀,如下
method  例如 method:login
action  例如 action:userLogin
redirect 例如 redirect:cancel.jsp
redirect-action 例如 redirect-action:register

使用method前缀,来取代action默认的execute()方法的执行。例如,在一个表单中同事事项用户注册和登录,代码如下:
<s:form action="userLogin">
<s;textfield label="用户名" name="user.userName"/>
<s:textfield label="密码" name="user.userPassword"/>
<s:submit value="登录" name="method:login"/>
<s:submit value="注册" name="method:register"/>
</s:from>
通过两个submit按钮,都提交到userLogin这个action,但是用户单击不同的按钮,分别提交奥到action中不通的方法 即 login和 register 方法进行处理。

使用action前缀,渠道form标签指定的action 将请求导向另外的action进行处理
例如:
<s:from action="userLogin">
<s:textfield  label="用户名" name="user.userName"/>
<s:password label="密码" name="user.userPassword"/>
<s;submit value="登录"/>
<s:submit value="注册" name="action.register"/>
</s:form>
用户单击登录按钮,将提交到userLogin进行处理,当单击注册按钮,将提交到register进行处理。

使用redirect 前缀,可以将请求重定向到其他的URL,甚至可是是WEB应用程序外的URL
例如:
<s:form action="userLogin">
<s:textfield label="用户名" name="user.userName"/>
<s:password label="密码" name="user.userPasswrod'/>
<s:submit value="登录"/>
<s:submit value="注册" name="redirect:www.itzcn.com'/>
</s:form>

使用 redirect-action前缀将请求重定向到其他的action,Struts2框架使用ServetRedirectResult来执行这个任务。
例如:
<s:form action="userLogin">
<s:textfield lable="用户名" name="user.userName"/>
<s:password label="密码" name="user.userPassword"/>
<s;submit value="登录"/>
<s:submit value="注册" name="redirect-action:register"/>
</s:form>

20 seelct 标签


select标签用来在页面中生成一个下拉列表框,该标签的属性如下:
list:必须是Collection, Map iterator array 表示要迭代的集合,使用姐中的元素来设置各个选项。如入list属性值是一个Map,则Map的key会成为选项的Key,map的Value会成为选项的Value
listKey:用来指定结婚中元素的某个属性作为下拉列表框的Key。
listValue:该属性用来指定集合中的元素的某个属性作为下拉列表框的value
multiple:该属性用来指定下拉列表框是否允许多选,其默认值为false
size:用来指定下拉列表框中可以选项个数

<body>
<h2>Select 标签的使用</h2><br>
<s:form>
<s:select name="bookSelect"
label="选择图书"
list="{'水浒传','三国演义','红楼梦','西游记'}"
multiple="true"/>
<s:select name="songSelect"
label="选择歌曲"
list="#{'laxs':'浪子心声','alzm':'暗里着迷','lx':'练习','ruyyt':'如果有一天'}"
listKey="key"
listValue="value"/>
</s:form>
</body>

21 checkboxlist 标签


主要根据lsit属性指定的集合。来一次性创建多个复选框,即一次性生成多个html表单中的<input type="checkbox"/>如果list属性是一个字符串集合,那就不需要在指定该标签的其他属性,如果list属性是一个java对象或者Map ,那就仍然需要指定标签的listKey和ListValue属性:
listKey:该属性用来指定集合元素中某个属性最为复选框的value,如果集合元素是一个java对象,那么就指定该java对象的name属性作为复选框的value。
listValue:该属性用来指定集合元素中的某个属性作为复选框的标签。如果结婚元素是一个java对象。那么就指定java对象的name属性作为复选框的value。

package com.sh.pojo;
import java.util.List;
public class User {
private String name;
private Book[] books;
public Book[] getBooks() {
return new Book[]{new Book("SSH入门到精通",68),new Book("Struts 2完全自学手册",22),new Book("深入浅出Hibernate",56)};
}
//get set
}

<body>
<h2>Checkboxlist 标签的使用</h2><br>
<s:form>
<!-- 使用字符串生成多个复选框 -->
<s:checkboxlist list="{'Java','Jsp','Servlet','Struts 2','AJax'}"
name="skills" label="熟悉技术" labelposition="top"/>
<!-- 使用Map对象来生成多个复选框 -->
<s:checkboxlist name="skillarea" label="你所关注的技术领域"
labelposition="top"
list="#{'Java':'Java','.Net':'.net','DataBase':'database','Ajax':'ajax','JavaScript':'js','HTML':'html'}"
listKey="key"
listValue="value"/>
<!-- 使用Java对象集合来生成多个复选框 -->
<s:bean name="com.sh.pojo.User" id="user">
</s:bean>
<s:checkboxlist list="#user.books" name="books"
label="请选择喜欢的图书" labelposition="top"
listKey="name" listValue="name"/>
</s:form>
</body>

22 radio 标签


radio:用来生成单选按钮,通过指定list listkey listvalue等属性来生成html标签元素,具体用法和checkboxlist标签的用法几乎完全相同,不同的是checkboxlist标签生成的是复选框,而radio生成的单选按钮。

<body>
<h2>radio标签的使用 </h2>
<s:form>
<!-- 使用字符串集合来生成多个单选按钮 -->
<s:radio list="{'JSP','java','.net','ajax'}"
name="skills" label="熟悉的技术" labelposition="right">
</s:radio>
<!-- 使用Map来生成多个单选按钮 -->
<s:radio list="#{'Java':'java','.Net':'.net','DataBase':'database'}"
label="你所关注的技术领域"
name="skillsarea"
listKey="key"
listValue="value"
value=".net"/>
<!-- 使用java对象集合来生成多个单选框 -->
<s:bean name="com.sh.pojo.User" id="user"/>
<s:radio name="books" list="#user.books" listKey="name" listValue="name"
label="请选择你喜欢的图书" labelposition="left"></s:radio>
</s:form>
</body>

23 datetimepicker 标签


datetimepicker:可以生成一个动态日历,单击标签按钮时就会弹出日历选择框,从而可以选择日期和时间,选择日期和时候后,系统就会把选择的日期和时间属输入到指定的文本框中。
常用的属性有:
displayFormat:该属性用来指定日期的显示格式,例如 可以指定yyyy-MM-dd作为日期的显示格式
language:该属性用来指定起立显示的语言,例如  zh_CN
type:用来指定选择框的类型,有两个值可选,date time 分别表示日期选择框和时间选择框。
datetimepicker 在Struts 2.0 和 Struts 2.1.6中使用不一样。
datetimepicker 存在乱码问题,这个还没有解决

Struts2.0 的使用


<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<s;head theme="ajax"/>
</head>
<body>
<h2>Struts2.0 datetimepicker 标签</h2>
<s:form action="addUser" namespace="/user">
<s:datatimepicker name="birthday" label="出生日期" displayFormat="yyyy/MM/dd"/>
<s:datatimepicker name="recordtime" label="记录时间" type="time" language="en_US"/>
</s:form>
</body>
<html>

Struts 2.1.6 的使用


<!-- 第一步 :导入 struts2-dojo-plugin-xxx.jar--->
<!-- 第二步 :导入 uri="/struts-dojo-tags" dojo 标签--->
<!-- 第三步 :在<head>体加入 <sx:head/> 或者 <s:head theme="xhtml"/>,<sd:head parseContent="true"/> 的标记 --->
<!-- 第四步 :和平常一样使用datetimepicker--->
<body>
<h2>Struts2.1.6 datetimepicker标签的使用 </h2>
<!-- 西方的排列方式 "日"在第一列 -->
<s:form action="test1" method="post">
<sx:datetimepicker name="user.birthday"
label="出生日期" displayFormat="yyyy/MM/dd"/>
<!-- 中国的排列方式 "一"在第一列 -->
<sx:datetimepicker name="user.birthday"
label="出生日期" displayFormat="yyyy/MM/dd"
weekStartsOn="1"/>
<!-- toggleType="fade" -->
<sx:datetimepicker name="user.birthday"
label="出生日期" displayFormat="yyyy/MM/dd"
toggleType="fade"/>
<!-- displayWeeks="4":表示显示的日期行数 默认为6行-->
<sx:datetimepicker name="user.birthday"
label="出生日期" displayFormat="yyyy-MM-dd HH:mm:ss"
displayWeeks="4"/>
<!-- toggleType="explode" toggleDuration="400" 指定动画效果 400ms缓慢显示-->
<sx:datetimepicker name="user.birthday"
label="出生日期" displayFormat="yyyy-MM-dd HH:mm:ss"
toggleType="explode" toggleDuration="400"/>
<sx:datetimepicker name="recordTime"
label="记录时间"
type="time"></sx:datetimepicker>
</s:form>
</body>

24 combobox标签


combobox:会生成两个元素,分别是单行文本框和下拉列表,并将他们组合在一起提供组合框(combobox)的功能,可以使用列表框将文本放入到文本框中,也可是直接在文本框中输入文件,可以使用的属性:
list:必须的 Collection Map iterator  Array 表示要迭代的集合,使用集合中的元素来设置列表框的各个选项。
maxlength:指定组合框的文本框部分可以输入字符的最大长度
readonly:当属性值为true时,用户不能在文本框中输入文本
size:指定组合框的文本输入框部分的可视尺寸。

<body>
<h2>Combobox标签的使用 </h2>
<s:form>
<s:combobox list="{'红楼梦','水浒传','三国演义','西游记'}"
label="选择喜欢的图书"
name="chooseBook"
cssStyle="width:70px;"
readonly="true"/>
<s:bean name="com.sh.pojo.User" id="user"></s:bean>
<s:combobox list="#user.books"
name="likeBooks"
listKey="name"
listValue="name"
size="50px;"
maxlength="5"
label="喜欢的书"
cssClass="width:70px;"></s:combobox>
</s:form>
</body>

25 doubleselect标签


doubleselect:标签用来在页面中生成一个级联列表框,第二个列表框显示的内容随第一个列表框选中的选项而变化。
该标签的属性如下:
list:必选属性,用于输出第一个下拉列表框中选项的集合。
listkey:用来指定集合种元素的某个属性作为第一个下拉列表框的key。如果集合是Map,则可以设置该属性值为字符串key或者value,分别用来将Map对象的key或value作为下拉列表框的key。
listValue:用来指定集合中元素的某个属性作为第一个下拉列表框的value。如果集合是Map。则可以设置该属性值为字符串key或value,分别用来将Map对象的key或value作为下拉列表框的value。
doubleList:该属性用来指定 输出第二个下拉列表框中选项的集合。
doubleListKey:用来指定集合中元素的某个属性作为下拉列表框中的key。如果是Map,则可以设置该属性值为字符串key或者value,分别用来将Map对象的key或者value最为下拉列表的key。
doubleListValue:该属性用来指定集合中元素的某个属性作为第二个下拉列表框的value。如果集合是Map,则可以设置该属性值为字符串的key或者value,分别用来将Map对象的key或value作为下拉列表框的value。
doubleName:用来指定第二个下拉列表框的name属性
doubleVale:用来初始化第二个列表框中的值。

<body>
<h2>doubleSelect标签的使用 </h2>
<s:form>
<s:doubleselect
name="singer"
label="选择您喜欢的歌曲"
list="{'刘德华','张学友','SHE'}"
doubleList="top=='刘德华'?{'浪子心声','如果以一天','练习'}:(top=='张学友'?{'吻别','饿狼传说','情书'}:{'Super start','半糖主义','中国话','波斯猫'})"
doubleName="song"
labelposition="top"></s:doubleselect>
<s:set name="bookList"
value="#{'曹雪芹':{'红楼梦'},'罗贯中':{'三国演义'},'施耐庵':{'水浒传'},'吴承恩':{'西游记'}}"/>
<s:doubleselect
name="author"
label="选择喜欢的图书"
list="#bookList.keySet()"
doubleList="#bookList[top]"
doubleName="book"
labelposition="top"></s:doubleselect>
</s:form>
</body>

26 optiontransferselect标签


optiontransferselect:用来在页面中生成转移列表组件。它是由两个<select>标签,以及这两个标签中用于将选项在两个<select>标签之间相互移动的按钮组成。
该标签的属性如下:
list:用来设置第一个i额列表框的集合
listKey:指定使用集合中对象的哪一个属性作为选项的value。针对第一个列表框有效。
listValue;指定使用集合中的对象的哪一个属性作为选项的内容。针对第一个列表框有效。
doubleList:设置第二个列表框的集合
doubleListKey:指定使用集合中对象的哪一个属性作为选项的value,针对第二个列表框有效。
doubleListValue:指定使用集合中对象的哪一个属性作为选项的内容,针对第二个列表框有效。
name:设置第一个列表框的name属性
vlaue:设置第一个列表框的value属性
multiple:设置第一个列表框是否支持多选,默认值为false
lefttile:设置左边列表框的标题
righttitle:设置右边列表框的标题
doubleName:设置第二个列表框的name属性
doubleValue:设置第二个列表框的value属性
doubleMultiple:设置第二个列表框是否支持多选,默认值为true
allowSelectAll:设置是否出现事项全部选项功能的按钮
selectAllLabel:设置事项全选功能的按钮上的文本
addAllToLeftLabel:设置实现全部左移功能的按钮上的文本。
addAllToRightLabel:设置实现全部右移功能的按钮上的文本。
addToLeftLabel:设置实现左移功能的按钮上的文本
addToRightLabel:设置实现右移功能的按钮上的文本
allowAddAllToLeft:设置是否出现实现全部左移功能的按钮。
allowAddAllToRight:设置是否出现实现全部右移功能的按钮。

<body>
<h2>Bean标签的使用 </h2>
<s:form>
<s:optiontransferselect
label="选择喜欢的歌曲"
name="selectSong"
labelposition="top"
leftTitle="歌曲列表"
rightTitle="您选择了以下歌曲"
list="{'浪子心声','暗里着迷','练习','如果有一天','天堂','男人哭吧哭吧不是醉','黑蝙蝠中队','爱火烧不经','等你爱你到最后','跟我两辈子'}"
headerKey="headKey"
headerValue="---请选择----"
multiple="true"
emptyOption="true"
doubleList=""
doubleName="yourSongs"
doubleEmptyOption="true"
doubleHeaderKey="doubleHeaderKey"
doubleHeaderValue="---请选择---"
doubleMultiple="true"
addAllToLeftLabel="全部移出去"
addAllToRightLabel="全部选择"
addToLeftLabel="移出"
addToRightLabel="选择"
selectAllLabel="全选"
rightDownLabel="下移"
rightUpLabel="上移"
leftDownLabel="下移"
leftUpLabel="上移"></s:optiontransferselect>
</s:form>
</body>

27 optgroup标签


optgroup:标签用来在页面中生成一个下拉框的选项组。也就是在下拉框中包含多个选项组,提供分类选择。
该标签做为select的子标签,创建一个选项组。可以在select标签的标签体中使用一个或者多个optgroup标签,对选项进行逻辑分组。但是optgroup本身不能嵌套。
list:必须的,属性的数据类型可以是Collection Map iterator Array 表示要迭代的集合,使用集合中的元素来设置各个选项。
listKey:用来指定集合中元素的某个属性作为选项的Key
listValue:用来指定集合中元素的某个属性作为选项的value。

<body>
<h2>optgroup标签的使用 </h2>
<s:select
label="选择您喜欢的歌曲"
name="selectSong"
list="#{'ggcjdss':'滚滚长江东逝水','wnm':'枉凝眉','hhg':'好汉歌','gwlzhf':'敢问路在何方'}">
<s:optgroup
label="刘德华歌曲"
list="#{'lzyx':'狼子野心','alzm':'暗里着迷','lx':'练习'}"
listKey="key"
listValue="value">
</s:optgroup>
<s:optgroup
label="SHE歌曲"
list="#{'bsm':'波斯猫','btzy':'半糖主义','aqhy':'爱情海洋'}"
listKey="key"
listValue="value">
</s:optgroup>
</s:select>
</body>

28 updownSelect标签


updownselect:标签用来创建一个带有上下移动的按钮的列表框,可以通过上下移动按钮来调整列表框中的选项的位置。
该标签的属性如下:
list:必须的,属性的数据类型可以是Collection,Map iterator 或者 Array 表示要迭代的集合,使用集合的元素来设置各个选项。
multiple:如果值为true 创建一个多选列表。
size:设置下拉列表现实的选项个数。
allowMoveUp:是否显示实现上移功能的按钮 默认值为true
allowMoveDown:设置是否显示实现下移功能的按钮,默认值是true。
allowSelectAll:设置是否显示实现全选功能的按钮,默认只是ture
moveUpLablel:设置上移按钮的文本,默认值为 “ ∨ ”
moveDownLabel:设置下移按钮的文本。默认值为 “ ∧ ” 
selectAllLabel:设置全选按钮的文本。默认值是“ * ”
listKey:指定集合中元素的某个属性作为选项的key
listValue:指定集合中元素的某个属性作为选项的value。
headerkey:设置单用户选择了header选项是提交的值。如果设置该属性,则不能为该属性赋空值。
headervalue:设置header选项的内容。
EmptypOption:是否在header选项后添加一个空选项。

<body>
<h2>updownselect标签的使用 </h2>
<s:form>
<s:updownselect
label="歌曲列表"
name="sons"
list="#{'lzxs':'浪子心声','lx':'练习','gwlbz':'给我两辈子'}"
headerKey="1"
headerValue="---选择---"
selectAllLabel="全选"
moveDownLabel="下移"
moveUpLabel="上移"></s:updownselect>
</s:form>
</body>

--非表单标签
29 component标签


component:标签用来创建自定义组建。在component标签内还可以使用param子标签,通过param标签向标签模版中传递参数。
该标签的属性如下:
theme:该属性用来指定自定义组件所使用的主题。如果不指定该属性,则默认使用xhtml主题。
templateDir:该属性用来指定自定义主键的主题目录。如果不指定该属性,则默认使用系统的主题目录,即template目录
template:该属性用来指定自定义组件所使用的模版文件,自定组件是基于主题模版管理的,在自定义模版文件中,可以采用FreeMarker ,Jsp 和Veloctiy3中技术编写。
如果是FreeMarker模版,可以通过${parameters.key}或者${parameters.get('key')} 来获取对象
如果是JSP 模版,可以通过<s:property value="%{parameter.key}"/> 或者 <s:property value="%{parameters.get('key')}"/> 来获取对象

component.jsp


<body>
<h2>Conponent标签的使用 </h2>
<s:component template="myTemplate.jsp">
<s:param name="songList"
value="{'情书','来生缘','如果有一天','流浪'}"/>
</s:component>
</body>

在webroot/template/xhtml/myTemplate.jsp


<body>
<div style="font-weight: bold;color:blue;">
<h5>自定义模版</h5>
<hr>
<s:select label="歌曲列表" list="parameters.songList"/>
</div>
</body>

30 actionerror和actionmessage标签


actionerror和actionmessage:标签的用法和效果几乎是一样的,都是用来输出Action中的消息。
区别:
actionError标签,用来输出Action中getActionError()方法的返回值。
actionMessage标签,用来输出Action中getActionMessage()方法的返回值。

action.java


package com.sh.action;
import com.opensymphony.xwork2.ActionSupport;
public class MsgAction extends ActionSupport {
@Override
public String execute() throws Exception {
addActionError("this is the first ERROR!");
addActionError("this is the second ERROR!");
addActionMessage("this is the first Message");
addActionMessage("this is the second Message");
return SUCCESS;
}
}

struts.xml

<action name="test3" class="com.sh.action.MsgAction">
<result>/actionMessageError.jsp</result>
</action>

jsp


<body>
<h2>ActionError 和 ActionMessage标签的使用 </h2>
<s:actionerror/>
<s:actionmessage/>
</body>

31 tree和treenode标签


tree和treenode这2个标签主要用来生成一个树形结果,例如常见的树形结构菜单和树形列表等。其中tree标签用来生成树形结构,treenode标签用来生成树形结构中的节点。
Struts2.1.6之后将tree treenode 放到dojo包中了

Struts2.0之前 使用 s标签就可以,并且每个表都要设置theme=‘ajax’
Struts2.1.6


<!--导入 struts2-dojo-plugin-2.3.4.1.jar -->
<!--导入 /struts-dojo-tags 标签 -->
<!---在head中 加入 <sx:head/>--->
<body>
<h2>tree  treeNode标签的使用 </h2>
<sx:tree label="计算机编程系列图书"
id="books"
showRootGrid="true"
showGrid="false"
treeSelectedTopic="treeSelect">
<sx:treenode label="Java基础" id="ajax" >
<sx:treenode label="Java程序设计案例教程" id="java"/>
<sx:treenode label="Jsp实例教程" id="JSP"/>
<sx:treenode label="AJax+Jsp巧学巧用" id="AJax-Jsp"/>
<sx:treenode label="AJax完全学习手册" id="AJax"/>
</sx:treenode>
<sx:treenode label="Web框架" id="web">
<sx:treenode label="JSP开发入门到精通" id="web_jsp"/>
<sx:treenode label="SSH入门到精通" id="SSH"/>
<sx:treenode label="Struts2 完全学习手册" id="Struts2"/>
<sx:treenode label="Hibernate3入门到精通" id="hibernate"/>
</sx:treenode>
</sx:tree>
</body>
  • Struts2_Tags.zip (4.8 MB)
  • 下载次数: 30

Struts2 常用标签使用(三十九)相关推荐

  1. Python编程基础:第三十九节 面向对象编程Object Oriented Programming

    第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...

  2. WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形

    原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...

  3. 【正点原子FPGA连载】第三十九章OV7725摄像头RGB-LCD显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  4. [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. 【正点原子MP157连载】第三十九章 LCD驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  6. NeHe OpenGL第三十九课:物理模拟

    NeHe OpenGL第三十九课:物理模拟 物理模拟简介: 还记得高中的物理吧,直线运动,自由落体运动,弹簧.在这一课里,我们将创造这一切.   物理模拟介绍 如果你很熟悉物理规律,并且想实现它,这篇 ...

  7. javaweb学习总结(三十九)——数据库连接池

    javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10 ...

  8. 三十九、Java集合中的HashSet和TreeSet

    @Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  9. 【零基础学Java】—List集合(三十九)

    [零基础学Java]-List集合(三十九) java.util.list接口 extends Collection接口 list接口的特点: 1.有序的集合,存储元素和取出元素的顺序是一致的(存储1 ...

  10. JavaScript学习(三十九)—对象中内容的操作

    JavaScript学习(三十九)-对象中内容的操作 一.对象中内容的操作:增.删.改.查 (一).增:给对象添加属性或者方法 1)方式1:对象名称.属性名=属性值: 2)方式2:对象名称['属性名' ...

最新文章

  1. dubbo学习之dubbo管理控制台装配及集成zookeeper集群部署(1)【转】
  2. yolov3算法优点缺点_优点缺点
  3. 印象大使_基本服务-使用大使网关
  4. python 寻找数组的中心索引_Leetcode724查找数组Python的中心索引,LeetCode724,寻找,python...
  5. 从小白到大数据技术专家的学习历程,你准备好了吗
  6. 【Hoxton.SR1版本】Spring Cloud Gateway之Predicate详解
  7. springmvc源码-参数解析
  8. C语言--大小端转换
  9. angularjs姓名转拼音js
  10. html5 右侧客服代码,js实现浮动在网页右侧的简洁QQ在线客服代码
  11. 【】论晚睡晚起的危害
  12. win7系统无法正常启动
  13. 深富策略科技股持续走强
  14. 使用IntelliJ IDEA打开一个项目步骤
  15. 【实例学模式】一针见血装饰器模式
  16. FFmpeg 录制桌面、麦克风、摄像头
  17. 基于Android的聊天系统
  18. Java实现回溯算法中的装载问题---(详细)
  19. Python 入门之类的继承
  20. Sqlite大批量导入数据提高效率的几种方式

热门文章

  1. 国家高新技术企业,科创板上市会更容易吗?
  2. html5 拓扑图 切片,HTML5复杂拓扑图(四) 组织结构图
  3. SAP 如何在选择画面中显示图片 <转载> cl_gui_docking_container
  4. DL----karas可视化工具
  5. 黑洞大作战游戏架构设计与实现
  6. Linux MD5 programming in C Language
  7. 干货!程序员需掌握的100个英语词汇
  8. 9.Excel vba开发-转换为大写
  9. SwiftUI基础——创建并组合视图
  10. Mac快速文字处理软件:Mellel