【问题标题】:Getting value in s:param from value stack从值堆栈中获取 s:param 中的值
【发布时间】:2014-12-30 08:04:47
【问题描述】:

我在项目中从 2.3.4.1 升级到 struts 2.3.16.3,但以下标记停止工作。

<s:param name="%{#key}" value="%{#keyValue}"/>

params:url 标记内使用。名称部分正在评估,但值未评估并显示为页面中 url 内的文本“keyValue”。此标记在一个联系人 jsp 中,该 jsp 包含在其他 jsp 中。 keykeyValue 在父 jsp 中定义。

例如,<s:set var="key" value="'billToId'" /> <s:set var="keyValue" value="'%{billToId}'"/>

我尝试在 struts.xml 中设置以下常量,但没有解决问题。

<constant name="struts.ognl.enableOGNLEvalExpression" value="true" />

我已经针对这个问题提出了解决方法,但是有没有办法使用这个 ognl 表达式从值堆栈中读取值。

【问题讨论】:

  • 确保您在 包含 JSP 中也有 &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;,并确保 tld 文件可用
  • 你有代码吗?因为它似乎是重复的,但我不知道是哪一个。
  • @AndreaLigios taglib 包含在 jsp 中,我假设 tlds 可用,因为其他与 struts 相关的标签工作正常。
  • @RomanC 我已经包含了定义 key 和 keyValue 的代码。如果我需要添加其他内容,请告诉我。
  • 你使用的是 jsp:include 还是 s:include ?

标签: jsp struts2


【解决方案1】:

我不记得自从 param 标签变成只接受 String 类型的值以来的时间。这可能是一个错误,但实际参数值类型应转换为String 类型。另见Suppress empty parameters using param tag

【讨论】:

    【解决方案2】:

    你使用的是 jsp:include 还是 s:include ?

    @AndreaLigios &lt;%@ include file="/WEB-INF/jsp/contact/listContacts.jspf"%&gt; 正在使用中

    &lt;%@ include 是静态包含指令,而你应该使用动态&lt;jsp:include/&gt;标签,甚至更好,因为你使用的是Struts2,&lt;s:include/&gt;标签。

    阅读更多关于detailed answer的信息。

    【讨论】:

    • 尝试使用 s:include。现在看起来它试图评估表达式。但是我得到了类似 billToId=%25%7BbillToId%7D 的值。它正在获取密钥而不是 keyValue。
    • billToId.value ?顺便说一句,那个物体是什么?完全不清楚,但似乎你做了正确的第一步。
    • 这是在父jsp中设置的键。 keyValue 的密钥也回来了。 。出于某种原因,没有对表达式 %{billToId} 进行评估。
    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2013-05-20
    • 2013-01-18
    相关资源
    最近更新 更多