【问题标题】:struts ognl dynamic expressionstruts ognl 动态表达式
【发布时间】:2013-09-29 12:36:40
【问题描述】:

我花了最后几个小时让 Struts 表达式按我的意愿工作,但没有成功。

我想从字符串执行 OGNL 表达式。

例如,我有以下代码:

<s:push value="#row">

    alert('<s:property value="id + ' ' + id" />');

</s:push>

这完美地给了我两次对象的 id。

这个例子

<s:push value="#row">

    <s:set name="expr" value="id + ' ' + id"/>
    alert('<s:property value="%{#expr}" />');

</s:push>

也很好用。

但是现在,如果我在我的操作中创建一个方法:

public String getTest() {

    return "id + ' ' + id";
}

在 JSP 中:

<s:set name="expr" value="getTest()"/>

<s:push value="#row">

    alert('<s:property value="%{#expr}" />');

</s:push>

结果是:

alert('id + ' ' + id'); 

由于引号而不起作用。

但是为什么在我的上一个示例中我有 String 值而不是评估的表达式?

我尝试了很多可能性,阅读了文章、教程,但没有找到适合我的问题的答案。

【问题讨论】:

  • 但是为什么在我的最后一个例子中我有 String 值而不是表达式? 因为它是一个 String。
  • 看到这个问题:stackoverflow.com/q/16712395/1700321.
  • @AleksandrM:你让我哭了:D
  • 感谢 Aleksandr M ! 彻底解决了问题。

标签: java jsp struts2 ognl


【解决方案1】:

Struts 2 默认会转义 ActionMessages。

试试&lt;s:property value="%{#expr}" escape="false"/&gt;

UDPATE

试试

alert(<s:property value="%{#expr}" />);

没有

alert('<s:property value="%{#expr}" />');

【讨论】:

  • 我加escape="false"时没有区别。
  • 这是一个 Javascript 问题而不是 Java
  • 这显然不是问题,因为 s:property 被执行并被一个值替换。我不在乎 Javascript 不起作用,我问为什么 s:property 没有被替换为与第二个示例相同的值。
  • 删除 JS 引号无论如何都无关紧要,并且只有在没有它们的情况下保证被警告的值在 JS 中是合法的时才会起作用。使用引号,表达式需要被 JS 转义。
猜你喜欢
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多