2012-06-27 65 views
1

在我的JSP我:Struts2的OGNL表達式

<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:propertys:textarea解決。

有沒有人知道它爲什麼這樣工作?


我試過%{${param.objId}}而不是%{#${param.objId}}和它的工作。

但我無法解釋爲什麼它的工作原理...

+0

這真的是你的onclick處理程序嗎?請考慮將其移出標籤 - 這是不可讀的。 –

+0

嗨,你不覺得它可能是jQuery的衝突嗎?如果你需要在你的jquery函數中使用一些遠程內容,我可以試試而不是$ {} – Jaiwo99

+0

@ Jaiwo99否; JSP EL在服務器端進行評估。 –

回答

0

無需檢查的話,我想下面的解釋應該有所幫助:

考慮到在OGNL %{}逃脫OGNL表達式,則適用以下:

在OGNL中,您有一個表達式#beanName${beanName}以從根上下文獲取bean beanName的值。如果您執行以下操作:#${beanName},您將首先查找該bean的名稱,然後使用該字符串在OGNL根上下文中查找值。

所以,#${param.innerDdAttr}.id,會發生以下情況:

  • 在OGNL查找param上下文
  • 獲取innerDdAttr屬性的值(這大概會給你「ddRepeatingAttrId」的值)
  • 這意味着#${param.innerDdAttr}.id將解析爲#ddRepeatingAttrId.id,所以後來
  • 在OGNL上下文中查找ddRepeatingAttrId
  • 獲取id屬性的值(它給出「4」的值)。

相比之下,#${param.objId}發生的事情是:

  • 在OGNL查找param上下文
  • 獲取objId屬性的值(這大概將您的值 「7」)
  • 這意味着#${param.innerDdAttr}.id將解析爲#7,所以後來
  • 在OGNL上下文中查找7,能源部找不到任何東西,所以它不會打印任何東西。

恕我直言,而不是%{#${param.objId}},你可能想%{#param.objId}或只是%{param.objId}(不同的是,#只會考慮根上下文,否則搜索OGNL上下文)。

希望有所幫助。

+0

感謝您的note.But $ {param.objId}解析爲categoryObject.linkAttrValue [#ddAttr.id] .link.id不是7(它通過簡單的$ { param.objId} jsp文本)。我在jsp:include中傳遞了objId作爲參數。 – sanek

+0

公平點,但我仍然認爲這個問題最有可能使用'#$ {...}'來處理。 – beny23