struts2 ognl表达

struts2 ognl表达,struts2,Struts2,在我的JSP中,我有: <s:textarea name="${param.objId}"/> 最后,提交标签: <s:submit action="addRepeatingCategoryObject" value="addNew" onclick="$('input[name=ddRepeatingAttrId]').val(%{#${param.objId}}); alert(%{#${param.objId}}); $('input[name=ddRepea

在我的JSP中,我有:

<s:textarea name="${param.objId}"/>
最后,提交标签:

<s:submit action="addRepeatingCategoryObject" value="addNew"
   onclick="$('input[name=ddRepeatingAttrId]').val(%{#${param.objId}}); alert(%{#${param.objId}});   $('input[name=ddRepeatingAttrId]').val(%{#${param.innerDdAttr}.id}); " />

这意味着:

<input type="submit" id="browseCategoryObject_addRepeatingCategoryObject"
       name="action:addRepeatingCategoryObject" value="addNew"  
       onclick="$('input[name=ddRepeatingAttrId]').val(); alert();   $('input[name=ddRepeatingAttrId]').val(4); "/>

表达式
%{param.inneddattr}.id}
s:submit
中解析,但
%{{param.objId}
s:submit
中未解析,而是在
s:property
s:textarea
中解析

有人知道为什么它是这样工作的吗


我尝试了
%{${param.objId}
而不是
%{{param.objId}
,结果成功了


但是我无法解释它为什么工作…

如果没有检查它,我认为下面的解释应该会有所帮助:

考虑到在OGNL
%{}
中转义OGNL表达式,以下内容适用:

在OGNL中,有一个表达式
#beanName
${beanName}
从根上下文获取bean
beanName
的值。如果您执行以下操作:
#${beanName}
,实际上您将首先查找bean的名称,然后使用该字符串在OGNL根上下文中查找值

因此,对于
#${param.innerdaddr}.id
,会发生以下情况:

  • 在OGNL上下文中查找
    param
  • 获取
    innerDdAttr
    属性的值(该属性可能会给您一个“ddRepeatingAttrId”值)
  • 这意味着
    #${param.innerdattr}.id
    将解析为
    #ddRepeatingAttrId.id
    ,因此
  • 在OGNL上下文中查找
    ddRepeatingAttrId
  • 获取
    id
    属性的值(该属性的值为“4”)
相反,对于
#${param.objId}
来说,发生的是:

  • 在OGNL上下文中查找
    param
  • 获取
    objId
    属性的值(您可能会得到一个值“7”)
  • 这意味着
    #${param.innerdaddr}.id
    将解析为
    #7
    ,因此
  • 在OGNL上下文中查找
    7
    ,它找不到任何内容,因此不会打印任何内容
< P> iMHO,而不是<代码> {{ PARAM.ObjID}} /Case>,您可能需要<代码> %{ PARAM.ObjID} /CODE >或只是<代码> %{PARAM.ObjID} /COD>(区别在于,<>代码>< /COD> >只考虑根上下文,否则搜索OGNL上下文)。
希望这能有所帮助。

谢谢你的注释。但是${param.objId}被解析为categoryObject.linkAttrValue[#ddAttr.id]。link.id不是7(它是由简单的${param.objId}jsp文本生成的)。我在jsp:include.Fair point中将objId作为param传递,但我仍然认为问题最有可能与使用
#${…}
有关。这真的是您的onclick处理程序吗?请考虑把它从标签中移出——这是不可能阅读的。嗨,你不觉得它可能是jQuery冲突吗?如果您需要jquery函数中的一些远程内容,我可以尝试代替${}@Jaiwo99 No;JSPEL在服务器端进行评估;由于存在安全风险,一段时间以来,OGNL表达式中明确禁止使用JSP EL。在任何情况下,您的代码都与上一段所说的不匹配,因此我认为您应该重新回答这个问题
7
<s:submit action="addRepeatingCategoryObject" value="addNew"
   onclick="$('input[name=ddRepeatingAttrId]').val(%{#${param.objId}}); alert(%{#${param.objId}});   $('input[name=ddRepeatingAttrId]').val(%{#${param.innerDdAttr}.id}); " />
<input type="submit" id="browseCategoryObject_addRepeatingCategoryObject"
       name="action:addRepeatingCategoryObject" value="addNew"  
       onclick="$('input[name=ddRepeatingAttrId]').val(); alert();   $('input[name=ddRepeatingAttrId]').val(4); "/>