【问题标题】:Testing Struts request parameter against String with odd results - why does it look like a collection?针对 String 测试 Struts 请求参数,结果很奇怪 - 为什么它看起来像一个集合?
【发布时间】:2018-03-23 02:46:48
【问题描述】:

我正在通过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...

我在 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>

那个输出让我更加困惑。有人可以解释一下发生了什么吗?

【问题讨论】:

  • 看看下面的网址 - blah?some=v1&amp;some=v2&amp;some=v3&amp;another=v。参数是列表的映射。

标签: java jsp struts2 ognl


【解决方案1】:

你不需要假装,它是一个集合。新实现使用HttpParameters 而OGNL 表达式不知道这一点,标签在不是字符串的对象上使用toString() 值。

您可以在this 答案中阅读有关参数的更多信息。

HttpParameters。后面的类实现了Map&lt;String,Parameter&gt;,所以可以使用 this 获取/放置参数到地图。

另见:

【讨论】:

  • 你如何获得第一个地图元素? &lt;s:if test="#parameters.error[0] == 'bar'"&gt; 有效,但 &lt;s:property value="parameters.error[0]"/&gt; 无效,但两者都是标签...?
  • 刚看了"What's the difference between # , % and $ signs in Struts tags?" 并意识到我可能不得不强制评估为 OGNL,事实上,它似乎有效:&lt;s:property value="%{#parameters.error[0]}"/&gt;
  • 这是一篇旧文章,可能不适用于新版本。要明确解释您的问题,我建议阅读 stackoverflow.com/a/17001858/573032stackoverflow.com/a/44986848/573032
  • 您的回答详细介绍了 HttpParameters 实现 Map&lt;String, Parameter&gt; - 这没有回答为什么需要看起来像数组索引的东西。您的帖子包含有用的提示,但在 2017 年,当我问我的问题时,它不是答案。 (Parameter 似乎也没有实现Collection。)有帮助的是我随后自己挖出并留下评论的链接。所以,感谢您提醒什么是已接受的答案,但您的回复虽然很有帮助,但并不是我想要的答案——这就是我当时不接受您的答案的原因。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 2021-02-19
  • 2017-05-20
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多