针对具有奇数结果的字符串测试 Struts 请求参数 - 为什么它看起来像一个集合



我正在通过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 中使用参数

相关内容

最新更新