∪∩deniable Design

个人JAVA版GAE(google app engine),struts2+jpa+jQuery开发,互相交流 http://iunbug.appspot.com/
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于Struts 2.0.11与表达式

Posted on 2008-08-15 21:43 ∪∩BUG 阅读(429) 评论(0)  编辑  收藏 所属分类: Struts2学习笔记

 

 1Struts 笔记
 22008 08 15
 3当你使用struts 2 tags时,如果使用代码:
 4<s:set name="name" value="<%= "'" + request.getParameter("name") + "'" %>" />
 5或者
 6
 7<s:set name="name"value="${param.name}" />
 8都会发生下列错误:
 9According to TLD or attribute directive in tag file, attributevalue does not accept any expressions
10而得使用:
11<s:set name="name" value="#parameters.name[0]" />
12才行
13原因可能是因为你使用了<%..%>代码 or JSP EL表达式。Struts 2从 version2.0.11开始已经不支持strutstag与JSP EL表达式混合使用了(不在struts tag里使用EL还是可以的)
14
15
16技巧(Trick Tip):
17对于<s:property>,是使用
18<s:property value="#parameters.name"/>
19而对于<s:set>,则要使用(否则出错):
20<s:set name="name" value="#parameters.name[0]" />
21
22但是如果使用struts include tag来传参数,则<s:property><s:set>无法获取传来的参数,如:
23<body>
24<s:include value= "/welcome.jsp">
25<s:param name="name">Scott</s:param>
26</s:include>
27</body>
28那么在webcome.jsp里通过<s:property><s:set>无法获取"name"参数:
29<s:property value="#parameters.name" />
30<s:set name="name"value="#parameters.name[0]" />
31而只能够用
32<%request.getParameter("name")%>
33来获取
34
35例如:
36<%@ page contentType="text/html; charset=UTF-8"%>
37<%@ taglib prefix="s" uri="/struts-tags"%>
38<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
39<html>
40    <head>
41        <title>Condition Flow</title>
42    </head>
43    <body>
44        <h3>
45            Condition Flow
46        </h3>
47
48        <!-- 注意"'" + request.getParameter("name") + "'"这里的单引号 -->
49        <!-- s:if test="#name == 'Max'" 判断取出name的值是否与Max相等,#表示取出值 -->
50        <s:set name="name"
51            value="#parameters.name[0]" />
52
53        <s:if test="#name == 'Max'">
54            Max's file here
55        </s:if>
56        <s:elseif test="#name == 'Scott'">
57            Scott's file here
58        </s:elseif>
59        <s:else>
60            Other's file here
61        </s:else>
62    </body>
63</html>
64<!--
65            这里有点小技巧:
66            本来可以用#parameters.name[0]来获得,请求中name的值。但是,在我实现include例子时,
67            无论我用param标志给name赋任何值,#parameters里面不会含有任何值,所以#parameters.name也为空值。
68            
69            其原因为:
70            当使用include标志时,被包含的页面(included)里#parameters拿到的是包含页面里的请求参数。
71            
72            因此,这里必须手工调用request.getParameter("name")。        
73-->
74

只有注册用户登录后才能发表评论。


网站导航: