∪∩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 閱讀(436) 評論(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
          主站蜘蛛池模板: 武穴市| 洛隆县| 河北区| 阿坝| 平阳县| 余干县| 瑞昌市| 库伦旗| 盘山县| 剑川县| 龙山县| 杨浦区| 斗六市| 莱阳市| 秦皇岛市| 广河县| 察隅县| 和龙市| 夹江县| 买车| 临海市| 攀枝花市| 新巴尔虎左旗| 天峻县| 赞皇县| 抚松县| 镇平县| 浦县| 西畴县| 拉萨市| 奎屯市| 灵台县| 南投市| 神木县| 阿图什市| 墨脱县| 高青县| 怀宁县| 容城县| 河西区| 堆龙德庆县|