struts2 ognl表达
在我的JSP中,我有: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
<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}
从根上下文获取beanbeanName
的值。如果您执行以下操作:#${beanName}
,实际上您将首先查找bean的名称,然后使用该字符串在OGNL根上下文中查找值
因此,对于#${param.innerdaddr}.id
,会发生以下情况:
- 在OGNL上下文中查找
param
- 获取
属性的值(该属性可能会给您一个“ddRepeatingAttrId”值)innerDdAttr
- 这意味着
将解析为#${param.innerdattr}.id
,因此#ddRepeatingAttrId.id
- 在OGNL上下文中查找
ddRepeatingAttrId
- 获取
属性的值(该属性的值为“4”)id
#${param.objId}
来说,发生的是:
- 在OGNL上下文中查找
param
- 获取
属性的值(您可能会得到一个值“7”)objId
- 这意味着
将解析为#${param.innerdaddr}.id
,因此#7
- 在OGNL上下文中查找
,它找不到任何内容,因此不会打印任何内容7
希望这能有所帮助。谢谢你的注释。但是${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); "/>