struts2.1.6 tags 06

Struts-Tags

1. 通用标签:

a) property

b) set

i. 默认为action scope,会将值放入request和ActionContext中

ii. page、request、session、application

c) bean

d) include(对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)

e) param

f) debug

2. 控制标签

a) if elseif else

b) iterator

i. collections map enumeration iterator array

c) subset

3. UI标签

a) theme

i. simple xhtml(默认) css_xhtml ajax

4. AJAX标签

a) 补充

5. $ # %的区别

a) $用于i18n和struts配置文件

b) #取得ActionContext的值

c) %将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用

i. 参考<s:property 和 <s:include

________________________________________________________________________


property

Parameters

Name
Required
Default
Evaluated
Type
Description
defaultfalse falseStringThe default value to be used if value attribute is null
escapefalsetruefalseBooleanWhether to escape HTML
valuefalse<top of stack>falseObjectValue to be displayed

Examples

  1. <s:push value="myBean">  
  2.     <!-- Example 1: -->  
  3.     <s:property value="myBeanProperty" />  
  4.   
  5.     <!-- Example 2: -->TextUtils  
  6.     <s:property value="myBeanProperty" default="a default value" />  
  7. </s:push>  

property 凡是value 等于Object类型的它都会把里面的字符串解析为OGNL表达式

%{} 把里面的内容当成ognl表达式

  1. package com.demo.tags;  
  2.   
  3. public class Dog {  
  4.     private String name;  
  5.     public Dog() {}  
  6.     public Dog(String name) {  
  7.         this.name = name;  
  8.     }  
  9.     public String getName() {  
  10.         return name;  
  11.     }  
  12.     public void setName(String name) {  
  13.         this.name = name;  
  14.     }  
  15.     @Override  
  16.     public String toString() {  
  17.         return "dog: " + name;  
  18.     }  
  19. }  

  1. package com.demo.tags;  
  2.   
  3. public class User {  
  4.     private int age = 8;  
  5.     public User() {}  
  6.     public User(int age) {  
  7.         this.age = age ;  
  8.     }  
  9.     public int getAge() {  
  10.         return age;  
  11.     }  
  12.     public void setAge(int age) {  
  13.         this.age = age;  
  14.     }  
  15.     @Override  
  16.     public String toString() {  
  17.         return "user" + age;  
  18.     }  
  19. }  

  1. package com.demo.tags;  
  2.   
  3. public class S {  
  4.     public static String STR = "STATIC STRIING";  
  5.     public static String s() {  
  6.         return "static method" ;  
  7.     }  
  8. }  

  1. package com.demo.tags;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class TagsAction extends ActionSupport {  
  6.     private String password ;  
  7.     private String username ;  
  8.     public String getPassword() {  
  9.         return password;  
  10.     }  
  11.     public void setPassword(String password) {  
  12.         this.password = password;  
  13.     }  
  14.     public String getUsername() {  
  15.         return username;  
  16.     }  
  17.     public void setUsername(String username) {  
  18.         this.username = username;  
  19.     }  
  20.       
  21.     @Override  
  22.     public String execute() throws Exception {  
  23.         this.addFieldError("fielderror.test","wrong !");  
  24.         return SUCCESS;  
  25.     }  
  26. }  
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <html>  
  8.   <head>  
  9.   </head>  
  10.   <body>  
  11.     访问属性  
  12.     <a href="<%=path %>/tags.action?username=u&password=p">tags</a>  
  13.   </body>  
  14. </html>  
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  2. <%@taglib uri="/struts-tags" prefix="s"%>  
  3. <%  
  4. String contextPath = request.getContextPath();  
  5. %>  
  6. <%  
  7. String path = request.getContextPath();  
  8. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  9. %>  
  10.   
  11. <html>  
  12.   <head>  
  13.   </head>  
  14.   <body>  
  15. <ol>  
  16.     <li>property: <s:property value="username"/></li>  
  17.     <li>property取值为字符串: <s:property value="'username'"/></li>  
  18.     <li>property设定默认值:<s:property value="admin" default="管理员"/></li>  
  19.     <li>property设定HTML: <s:property value="'<hr/>'" escape="false"/></li>  
  20.     <hr/>  
  21.     <li>set 设定adminName值(默认为request 和ActionContext):<s:set var="adminName" value="username"/></li>  
  22.     <li>set 从request取值: <s:property value="#request.adminName"/></li>  
  23.     <li>set从ActionContext取值: <s:property value="#adminName"/></li>  
  24.     <s:debug></s:debug>  
  25.     <li>set 设定范围(name已经被废弃了):<s:set name="adminPassword" value="password" scope="page"/></li>  
  26.     <li>set 从相应范围取值:<%=pageContext.getAttribute("adminPassword") %></li>  
  27.       
  28.     <li>set 设定var,范围为ActionContext(常用): <s:set var="adminPassword" value="password" scope="session"/></li>  
  29.     <li>set 使用#取值: <s:property value="#adminPassword"/></li>  
  30.     <li>set 从相应范围取值(常用):<s:property value="#session.adminPassword"/></li>  
  31.     <hr/>  
  32.       
  33.     <li>push: <s:set name="myDog" value="new com.demo.tags.Dog('oudy')"/></li>    
  34.     <li>push: <s:push value="#myDog"> <s:property value="name"/></s:push>  
  35.     </li>  
  36.       
  37.     <li>  
  38.         bean定义bean,并使用param来设定新的属性值  
  39.         <s:bean name="com.demo.tags.Dog"><s:param name="name" value="'pp'"></s:param>  
  40.         <s:property value="name"/></s:bean>  
  41.     </li>  
  42.       
  43.     <li>  
  44.         bean 查看debug情况:  
  45.         <s:bean name="com.demo.tags.Dog" var="myDog">  
  46.             <s:param name="name" value="'oudy'"></s:param>  
  47.         </s:bean>  
  48.         拿出值:  
  49.         <s:property value="#myDog.name"/>  
  50.     </li>  
  51.     <hr/>  
  52.     以下包含文件不推荐使用bug比较多:  
  53.     <li>include _include1.html 包含静态英文文件  
  54.         <s:include value="/_include1.html"></s:include>  
  55.     </li>  
  56.       
  57.     <li>include _include2.html 包含静态中文文件(中文试不出来)  
  58.         <s:include value="/_include2.html"></s:include>  
  59.     </li>  
  60.       
  61.     <li>include _include1.html 包含静态英文文件,说明%用法  
  62.         <s:set var="incPage" value="'/_include1.html'"/>  
  63.         <s:include value="%{#incPage}"/>  
  64.     </li>  
  65.     <hr/>  
  66.       
  67.     <li>  
  68.         if elseif else:  
  69.         age = <s:property value="#parameters.age[0]"/><br/>  
  70.         <s:set var="age" value="#parameters.age[0]"/>  
  71.         <s:if test="#age <0">wrong age !</s:if>  
  72.         <s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>  
  73.         <s:if test="#parameters.aaa == null">null</s:if>  
  74.     </li>  
  75.     <hr/>  
  76.     <li>遍历集合<br/>  
  77.     <s:iterator value="{1,2,3}">  
  78.         <s:property/>|  
  79.     </s:iterator>  
  80.     </li>  
  81.       
  82.     <li>自定义变量: <br/>  
  83.         <s:iterator value="{'aaa','bbb','ccc'}" var="x">  
  84.             <s:property value="#x.toUpperCase()"/>  
  85.         </s:iterator>  
  86.     </li>  
  87.       
  88.     <li>使用status: <br/>  
  89.     <s:iterator value="{'aaa','bbb','ccc'}" status="status">  
  90.         <s:property/> |  
  91.         遍历过的元素总数: <s:property value="#status.count"/> |  
  92.         遍历过的元素索引: <s:property value="#status.index"/> |  
  93.         当前是偶数?: <s:property value="#status.even"/> |  
  94.         当前是奇数?: <s:property value="#status.odd"/> |  
  95.         是第一个元素吗?: <s:property value="#status.first"/> |  
  96.         是最后一个元素吗?:<s:property value="#status.last"/>   
  97.         <br/>  
  98.     </s:iterator>  
  99.     </li>  
  100.       
  101.     <li>  
  102.     定义Map:  
  103.     <s:iterator value="#{1:'a',2:'b',3:'c'}">  
  104.         <s:property value="key"/> | <s:property value="value"/> <br/>  
  105.     </s:iterator>  
  106.     </li>  
  107.       
  108.     <li>  
  109.         <s:iterator value="#{1:'a',2:'b',3:'c'}" var="x">  
  110.             <s:property value="#x.key"/> | <s:property value="#x.value"/> <br/>  
  111.         </s:iterator>  
  112.     </li>  
  113.     <s:fielderror fieldName="fielderror.test" theme="simple"></s:fielderror>  
  114. </ol>  
  115.   
  116.   </body>  
  117. </html>  
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7. <!--     <constant name="struts.enable.DynamicMethodInvocation" value="false"/> -->  
  8.     <constant name="struts.devMode" value="true"/>       
  9.       
  10. <!--     <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> -->  
  11.     <constant name="struts.ui.theme" value="simple"></constant>  
  12.     <package name="resultType" extends="struts-default" >  
  13.     <action name="tags" class="com.demo.tags.TagsAction">  
  14.         <result>/tags.jsp</result>  
  15.     </action>  
  16.           
  17.     </package>  
  18. </struts>  

    list-style-type: none  把小圆圈去掉  o wrong!变成 wrong!

定义自己的theme

1. css(覆盖struts2原来的css)

2. 覆盖单个文件

3. 定义自己的theme

4. 实战:

a) 把所有主题定义为simple

b) fielderror特殊处理

c) 自己控制其他标签的展现


  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.       
  8.     <constant name="struts.devMode" value="true"/>     
  9.  <!--   <constant name="struts.ui.theme" value="css_xhtml"/> -->    
  10.           <constant name="struts.ui.theme" value="simple"/>   
  11.       
  12.     <package name="resultType" extends="struts-default" namespace="/">  
  13.         <action name="theme" class="com.demo.theme.ThemeAction">  
  14.             <result>/theme.jsp</result>  
  15.         </action>  
  16.     </package>  
  17. </struts>  
  1. <?xml version="1.0" encoding="GB18030" ?>  
  2. <%@ page language="java" contentType="text/html; charset=GB18030"  
  3.     pageEncoding="GB18030"%>  
  4. <%@ taglib uri="/struts-tags" prefix="s" %>  
  5.   
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  7. <html xmlns="http://www.w3.org/1999/xhtml">  
  8. <head>  
  9. <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />  
  10. <title>theme学习</title>  
  11.   
  12. <style type="text/css">  
  13. .formFieldError {  
  14. font-family: verdana, arial, helvetica, sans-serif;  
  15. font-size: 12px;  
  16. color: #FF3300;  
  17. vertical-align: bottom;  
  18. }  
  19.   
  20. .formFieldError ul {  
  21.     /*list-style-type: none*/  
  22.     margin: 0px;  
  23.     padding: 3px;  
  24.     vertical-align: middle;  
  25. }  
  26.   
  27. .formFieldError ul li{  
  28.     list-style-type: none  
  29.      
  30. }  
  31. </style>  
  32.   
  33. </head>  
  34. <body>  
  35. 用CSS控制显示  
  36.     <ol>  
  37.         <li>  
  38.         <s:form >  
  39.         <div class="formFieldError">  
  40.         <s:fielderror />  
  41.         </div>  
  42.         <s:textfield name='aaa'></s:textfield>  
  43.         </s:form>  
  44.         </li>  
  45.     </ol>  
  46. </body>  
  47. </html> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值