在我的JSP中我有:
<s:textarea name="${param.objId}"/>
这将呈现以下内容:
<textarea name="categoryObject.linkAttrValue[#ddAttr.id].link.id"
cols="" rows=""
id="browseCategoryObject_categoryObject_linkAttrValue_#ddAttr_id__link_id">7</textarea>
同样,我有一个属性标记:
<s:property value="${param.objId}"/>
呈现:
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); "/>
表达式%{#${param.innerDdAttr}.id}
已在s:submit
中得到解决,但%{#${param.objId}}
中未解析s:submit
,但已在s:property
和s:textarea
中解决。{ / p>
有人知道为什么它会以这种方式运作吗?
我尝试了%{${param.objId}}
而不是%{#${param.objId}}
,而且效果很好。
但我无法解释为什么会有效......
答案 0 :(得分:0)
如果没有检查过,我认为以下解释应该有所帮助:
考虑到在OGNL %{}
中转义OGNL表达式,以下情况适用:
在OGNL中,您有一个表达式#beanName
或${beanName}
来从根上下文中获取bean beanName
的值。如果执行以下操作:#${beanName}
,您实际上将首先查找bean的名称,然后使用该字符串在OGNL根上下文中查找值。
因此,对于#${param.innerDdAttr}.id
,会发生以下情况:
param
innerDdAttr
属性的值(可能会给你一个值“ddRepeatingAttrId”)#${param.innerDdAttr}.id
将解析为#ddRepeatingAttrId.id
,然后ddRepeatingAttrId
id
属性的值(它为您提供值“4”)。相反,对于#${param.objId}
,会发生什么:
param
objId
属性的值(可能是值“7”)#${param.innerDdAttr}.id
将解析为#7
,然后7
,它找不到任何内容,因此不会打印任何内容。恕我直言,而不是%{#${param.objId}}
,您可能需要%{#param.objId}
或仅%{param.objId}
(与#
不同的是,它只会考虑根上下文,否则会搜索OGNL上下文)。
希望有所帮助。