struts2经常使用标签

一.<s:url> <s:a><s:param>常见用法javascript

 <s:url action="" var=""/>用于产生一个地址css

 action 产生出一个地址,能够连接到某个action上html

var   自定义的变量名,将产生的地址放入OGNL Context中java

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

此句表示导入struts标签,并以s为前缀。即以s为前缀的标签均来自struts标签库。编程

 2.<link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet" type="text/css"/>session

此句表示利用url标签导入一个路径,连接到一个文件,注意此路径为项目下的绝对路径。app

 3.<s:url action="" var="" includeParams="get/none/all">jsp

 * all   表示自动将请求本页面的参数,加与本url以后post

 * none  表示没有此功能

* get   表示仅get请求本页面的参数,加于本url以后

4. struts2的s:param标签主要有两个属性name与value,

若想在value属性中输入直接量,则能够这样写:<s:param name="tableTitle" value="%{'user'}"/>,

也能够这样写:<s:param name="tableTitle">user</s:param>,这个表达式tableTitle变量的值为user字符串,而不是user变量;

若想取user对象的值,则能够这样写<s:param name="tableTitle" value="user"/>,

<s:param name="age" value="23">   value值计算不出ognl表达式的结果,原样输出.

 5. <s:url action="userAction!toReg" namespace="/user" var="url">             

  <s:param name="参数名称">参数内容</s:param>

     </s:url>

  id属性已经丢弃,被var所取代,var是在OGNL Context中的名字

  

(1)<a href="<s:property value="url"/>">注册</a>

(2)<s:a href="%{url}">注册</s:a>        struts2标签中用%

(3) <a href="${url}">注册</s:a>            用EL表达式   

(4)<a href="<s:url action="userAction!toReg" namespace="/user"/>">注册</a>  

<s:url>与<s:param>联合起来使用

  1. <s:url id="url" action="param/myparam.action">  
  2.                    <s:param name="a">  
  3.                        <s:property value="bonId"/>  
  4.                    </s:param>   
  5.                 </s:url>   
  6. <s:a href="%{url}">超连接</s:a>  
总结:<s:url />通常与<s:a />和<a/>配合使用,在平常编程中,通常不用<s:url>,

    直接使用<a  href="user/userAction!toReg" >注册</a> 简洁方便,

    struts2标签,取其精华。

二.<s:action/> struts2包含请求到一个action

通俗点说,从当前jsp页面(main.jsp)中向action发送请求,把数据显示到相应页面(category.jsp) ,若是设置executeResult=true,

能够把category.jsp信息包含到main.jsp中

举一个例子

struts.xml中

  1. <action name="bookAction" class="com.tarena.dang.web.action.BookAction">  
  2.      <result name="category">  
  3.          WEB-INF/jsp/main/category.jsp  
  4.      </result>  
  5.   
  6. </action>  

main.jsp页面中

  1. <s:action name="bookAction!showCategory" namespace="/book" executeResult="true"/>  
  2.          

action标签的属性:

id: 可选属性,该属性将会做为该Action的引用ID
name: 必填属性,指定该标签调用哪一个Action
namespace: 可选,指定该标签调用的Action所在的namespace.
executeResult: 可选,指定是否要将Action的处理结果页面包含到本页面。默认是false,即不包含。
ignoreContextParams: 可选,它指定该页面中的请求参数是否须要传入调用的Action、默认是false。 

注意<s:action>与<%@include% file="">的区别,后者能够包含一个静态jsp页面

<%@include file="recommend.jsp" %>

 

拓展:属性var:  若是咱们写了var="***"属性,就会把Action放入OGNL Context中,若是不写默认不放

举一个小例子

项目结构

 

struts.xml

  1. <package name="advance" extends="struts-default" namespace="/">  
  2.     <action name="tag" class="com.tit.outman.web.TagAction">  
  3.         <result name="success">  
  4.             /WEB-INF/jsp/tag.jsp  
  5.         </result>  
  6.     </action>  
  7.     <action name="*_*" class="com.tit.outman.web.{1}Action">  
  8.         <result name="success">  
  9.             /WEB-INF/jsp/{2}.jsp  
  10.         </result>  
  11.     </action>  
  12. </package>  

OneAction

  1. public class OneAction extends BaseAction{  
  2.        private String one="hello one";  
  3.        public String getOne() {  
  4.       return one;  
  5.        }  
  6.        public void setOne(String one) {  
  7.       this.one = one;  
  8.        }  
  9. }  

 TwoAction

  1. public class TwoAction extends BaseAction{  
  2.       private String two="hello two";  
  3.       public String getTwo() {  
  4.      return two;  
  5.       }  
  6.       public void setTwo(String two) {  
  7.      this.two = two;  
  8.       }  
  9. }  

tag.jsp

  1. <s:action name="One_1" executeResult="true" var="one_Action"></s:action>  
  2. <s:action name="One_2" executeResult="true" var="two_Action"></s:action>  
  3. <s:debug></s:debug>  
  4. <s:property value="#one_Action.one"/>  
访问     localhost:8080/struts05/tag.action

结果

   

<s:debug>显示

 

三.<s:form>, <s:select>,<s:textfield><s:password>常见用法

举一个例子,该例子主要是实现网站商品按照分类排序,主要功能有

当点击选项列表的  按上架时间  降序  选项,该模块商品从新排序。

jsp页面

[javascript] view plain copy print ?
  1. <script type="text/javascript">  
  2. function subButton(){  
  3.     document.forms[0].submit();      (1)当咱们点击选项列表的选项,执行脚本subButton()方法,将该表单提交。  
  4. }  
  5. </script>  
  6.           
  7. <s:form action="bookAction!showBook" namespace="/book">  
  8.   <s:hidden name="category.id"/>       
  9.  <s:select name="category.orderBy" list="#{'add_time desc':'按上架时间 降序','add_time asc':'按上架时间 升序'}"  
  10.   label="排序方式" theme="xhtml"  οnchange="subButton()"  value="category.orderBy"/>  
  11. <s:form>  

注意:theme属性:表示主题,可选项有xhtml和simple;若是不写,默认为xhtml。若是为simple,label不起做用了

  1. <s:form action="" method="" theme="xhtml">  
  2.   
  3.         <s:textfield  label="username" name="username" labelposition="top"   
  4.   
  5.         required="true" tooltip="aaa" tooltipIconPath=""  maxlength="15" readOnly="true"  
  6.   
  7.          size="30"/>  
  8.   
  9.         <s:password label="password" name="password" labelposition="top" >  
  10.   
  11.         <s:submit/>  
  12.   
  13.  </s:form>  

*labelposition属性   能够在有主题(theme)的前提下,指定label的位置

 *required属性  表示"只是必须的",会在label后加一个"*"号

 *tooltip属性  提示信息

 *tooltipIconPath属性 提示图片的路径          功能:当鼠标放在图片上时,会显示tooltp的值"aaa"

  *maxlength属性  maxlength="15"最多输入15个字符

 *readOnly属性  readOnly="true"文本框的内容是只读的,不能改

 *size属性  size="30"文本框最多显示30个字符

 结果

  

 除了struts2标记库自定义的属性,其余全部html的属性均可以使用,好比name value等,可是,有两个属性名字作了改动

class属性    在struts中为cssClass

 style属性    在struts中为cssStyle

拓展:<from></from>与<s:form></s:form>比较

1.<from>不提供绝对路径  使用普通html标签 select input   </from>
 2.<s:form>  自动添加绝对路径 <s:select></s:form>

 struts2标签不能嵌套,struts2标签能够实现Action数据回显到页面form表单

四.<s:property >

<s:property value="message" escape="true" default=""/>

*value:从ognl表达式中取出数据

*escape:表示value中从"message"取出的数据是不是转义的,默认是转义的

*default:若是ognl表达式中取不到值,就显示default的值

五.<s:token>
1. 令牌方式,防止重复提交
 2.若是发现重复提交,再也不向后继续执行其余拦截器和Action方法, 向前返回字符串 "invalid.token" (result名称)
 3.不在默认拦截器组内,必须手动添加
使用步骤:
1) 表单内: <s:token />
 2) <action> 配置:
 <intercepter-ref name="token" />
<intercepter-ref name="defaultStack" />
3) 添加result名称:invalid.token
 <result name="invalid.token">/xxxx.jsp</result>

当咱们在struts.xml采用动态方法的调用,即一个Action请求中包含许多方法,则还须要添加<param name="includeMethods">submitOrder</param>

具体代码以下

struts.xml中

  1. <action name="orderAction_*" class="com.tarena.dang.web.action.OrderAction" method="{1}">  
  2.             <interceptor-ref name="token" >  
  3.             <param name="includeMethods">submitOrder</param>  
  4.             </interceptor-ref>  
  5.             <interceptor-ref name="defaultStack" />  
  6.             <result name="invalid.token" type="redirect">/</result>  
  7. </action>  

六.<s:set/>
<s:set var="" value="" scope=""/>
从valueStack中取出数据,放入4个范围中
* scope 指定4个范围之一(pageContext,request,session,application)
*value Ognl表达式
举一个例子

  1. <s:url action="One_1" var="urladdress">  
  2. <a href="${urladdress}">click me</a>  
  3. <s:set var="url" value="#urladdress" scope="pageContext">  
  4. <a href="${url}">Click here</a>  

七.<s:textarea>
<s:form action="submit" namespace="/user" method="post" theme="xhtml">
       <s:textarea label="Textarea" name="content" cols="8" rols="3" />
       <s:submit/>
 </s:form>
 表示8列,3行的文本域

八.<s:checkbox>


  1. <s:form action="One_1">  
  2.     <s:checkbox label="ok?" name="ok"></s:checkbox>  
  3.     <s:submit></s:submit>  
  4. </s:form>  

struts2标记库的<s:checkbox>优点于:当你选中checkbox选项

当提交按钮,发送的请求会提交.....aaa.action?ok=true

点击提交按钮,发送的请求中会提交One_1.action?ok=false

 而普通的<input type="checkbox" name="ok" value="true"/>ok?

 若是不勾选,是不会提交One_1.action?ok=false


当使用多个checkbox的时候

在Action 类中定义private List<Integer> sports;

  1. <s:form action="submit" method="post" theme="xhtml">  
  2.         <s:checkbox label="游泳" name="sports" fieldValue="1"/>  
  3.         <s:checkbox label="网球" name="sports" fieldValue="2"/>  
  4.         <s:checkbox label="篮球" name="sports" fieldValue="3"/>  
  5.         <s:submit/>  
  6. </s:form>  


动态生成checkbox

Action类

  1. private Map<String,Integer> productOptions;  
  2. public String submit(){  
  3.    productOptions = new HashMap<String,Integer>();  
  4.    productOptions.put("One",1);  
  5.    productOptions.put("Two",2);  
  6.    productOptions.put("Three",3);  
  7.    return "success";  
  8. }        
  1. <s:form action="submit" method="post" theme="xhtml">  
  2.         <s:iterator value="productOptions">   
  3.             <s:checkbox label="%{key}" name="product" fieldValue="%{value}"></s:checkbox>  
  4.         </s:iterator>  
  5.         <s:submit/>  
  6. </s:form>  

结果

由于HashMap中的排序是按照hashCode排序的,因此如上显示 ,若是咱们用List,这样更好

九<s:iterator>

  1. <s:iterator value="userList" status="st">  
  2. <h3>  
  3. <s:property value="#st.index"/>  
  4. <s:property value="#st.count"/>  
  5. <s:property value="#st.first"/>  
  6. <s:property value="#st.modulus(3)"/>  
  7. <s:property value="#st.index"/>  
  8. </h3>  
  9. </s:iterator>  

count属性 计数从1开始

index属性 下标,技术从0开始

first属性   是否为第一个元素

modulus(n)  count除以n后取余

十<s:date>

Action类中

  1. private Date date = new Date();添加get set方法  

jsp页面

  1. <s:property  name="date" format="yyyy年MM月dd日 E"/>  


咱们还能够不用标签来表示时间

在BaseAction中 添加format方法

  1. public String format(Date date,String format){  
  2.     SimpleDateFormat sdf = new SimpleDateFormat(format);  
  3.         return sdf.format(date);  
  4. }  

Action类中

  1. private Date date = new Date();添加get set方法  
jsp页面
  1. <s:property value="format(date,'yyyy-MM-dd E')"/>