我正在通过foo.action?error=bar
调用操作
在struts.xml
中,我配置了如下操作链:
<action name="foo">
<interceptor-ref name="defaultStack"/>
<!-- custom interceptors -->
<result name="success">/jsp/foo.jsp</result>
</action>
在JSP中,我正在运行一个测试:
<s:if test="#parameters.error[0] == 'bar'">
这是遗留代码;这有效.
但是,以下内容没有,我不明白为什么:
<s:if test="#parameters.error == 'bar'">
为什么我需要假装错误参数是一个集合?
从文档来看:
- 从JSP访问ValueStack
- .JSP
我不应该这样做 - 但是我没有经常使用 JSP......
我在JSP中添加了以下内容,以帮助我了解正在发生的事情:
<s:property value="#parameters.error"/> // bar
<s:property value="parameters.error"/> // <nothing>
<s:property value="parameters.error[0]"/> // <nothing>
<%= pageContext.getRequest().getParameter("error") %> // bar
<%= pageContext.getRequest().getParameter("error").getClass() %> // class java.lang.String
<s:property value="#parameters.error=='bar'"/> // false
<s:property value="'token'.getClass()"/> // <nothing>
这种输出让我更加困惑。有人可以解释一下发生了什么吗?
你不需要假装,它是一个集合。新的实现使用HttpParameters
,而 OGNL 表达式不知道,标签正在使用不是字符串的对象toString()
值。
您可以在此答案中阅读有关参数的更多信息。
HttpParameters
. 后面的类实现了Map<String,Parameter>
,所以你可以使用这是获取/放置参数到地图。
另请参阅:
- 我们如何访问传递到操作中的请求参数
- 如何在 JSP 中使用参数