`
Luob.
  • 浏览: 1573915 次
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2 常用标签使用(三十九)

 
阅读更多
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所属的命名空间
methodposthtml表单的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="images/login.gif"/> 上述代码在客户端浏览器的源文件中,显示为如下内容:
<iput type="image" name="method:login" src="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>
0
1
分享到:
评论
2 楼 Luob. 2012-09-03  
MyItmy97 写道

还没有写完,慢慢补充。
1 楼 MyItmy97 2012-09-03  

相关推荐

Global site tag (gtag.js) - Google Analytics