∪∩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
          主站蜘蛛池模板: 安岳县| 阳新县| 洛阳市| 镇赉县| 南岸区| 隆子县| 辽宁省| 平谷区| 兴文县| 方城县| 陈巴尔虎旗| 长沙市| 武乡县| 昭平县| 正定县| 胶州市| 华坪县| 芜湖市| 马龙县| 五峰| 庆元县| 高州市| 潞城市| 沛县| 高安市| 肇庆市| 马山县| 宣恩县| 会同县| 富顺县| 西林县| 冷水江市| 夏邑县| 东平县| 嫩江县| 临西县| 香格里拉县| 佛冈县| 莱西市| 和田市| 潮安县|