當你使用struts 2 tags時,如果使用代碼:
<s:set name="name" value="<%= "'" + request.getParameter("name") + "'" %>" />
或者
<s:set name="name" value="${param.name}" />
都會發生下列錯誤:
According to TLD or attribute directive in tag file, attribute value does not accept any expressions
而得使用:
<s:set name="name" value="#parameters.name[0]" />
才行
原因可能是因爲你使用了<%..%>代碼 or JSP EL表達式。Struts 2從 version 2.0.11開始已經不支持struts tag與JSP EL表達式混合使用了(不在struts tag裏使用EL還是可以的),而只支持OGNL
Trick Tip:
對於<s:property>,是使用
<s:property value="#parameters.name" />
而對於<s:set>,則要使用(否則出錯):
<s:set name="name" value="#parameters.name[0]" />
但是如果使用struts include tag來傳參數,則<s:property>和<s:set>無法獲取傳來的參數,如:
<body>
<s:include
value= "/welcome.jsp">
<s:param
name="name">Scott</s:param>
</s:include>
</body>
那麼在webcome.jsp裏通過<s:property>和<s:set>無法獲取"name"參數:
<s:property value="#parameters.name" />
<s:set name="name" value="#parameters.name[0]" />
而只能夠用
<%request.getParameter("name")%>
來獲取