2014-03-27 42 views
2

這裏是我的代碼:爲什麼我的參數值在生成的URL中丟失?

<s:iterator value="ChapterTreeList" id="chapterTree"> 
    ... 
    <s:url 
     id="deployChaptersUrl" 
     action="ajaxDeployChapter" 
     includeContext="false"> 
     <s:param 
       name="nodeId" 
       value="%{#chapterTree.nodeId}"/> 
    </s:url> 

    <s:form 
     id="deployChapters%{#chapterTree.nodeId}" 
     action="%{deployChapterUrl}" 
     theme="simple" 
     method="POST"> 
    </s:form> 

    ... 
</s:iterator> 

我想到多種形式像下面這樣:

<form 
    id="deployChapters27623" 
    name="deployChapters27623" 
    action="/path/to/ajaxDeployChapter.action?nodeId=27623" <-- nodeId here 
    method="POST"> 
</form> 

而是我得到的形式是這樣的:

<form 
    id="deployChapters27623" 
    name="deployChapters27623" 
    action="/path/to/ajaxDeployChapter.action" <-- nodeId is missing here 
    method="POST"> 
</form> 

的Struts 2.3.15.1

+1

使用隱藏的形式,而不是網址使用參數字段。 –

+0

請參閱http://stackoverflow.com/q/21478791/1700321。 –

+0

在迭代器上也使用'var'而不是'id'(已棄用),並將ASAP至少遷移到* 2.3.15.3或更高版本至2.3.16.1,因爲從2.0.0到2.3.15.2,Struts版本會受到影響最近發現的安全問題。 –

回答

1

這是我如何解決我的問題:

<s:form 
    id="deployChapters%{#chapterTree.nodeId}" 
    action="%{deployChapterUrl}" 
    theme="simple" 
    method="POST"> 
    <s:hidden name="nodeId" value"%{#chapterTree.nodeId}" /> 
</s:form> 
1

我沒有使用S之前,但我會冒險猜測。

<s:form 
    id="deployChapters%{#chapterTree.nodeId}" 
    action="%{deployChapterUrl}" 
    theme="simple" 
    method="POST"> 
</s:form> 

是不是應該這樣?

<s:form 
    id="deployChapters%{#chapterTree.nodeId}" 
    action="%{deployChapterUrl}?%{#chapterTree.nodeId}" 
    theme="simple" 
    method="POST"> 
</s:form> 
2

POST HTTP方法將參數發送到請求主體。這是POSTGET之間的區別,支持參數到查詢字符串中。

所以,你甚至不應該嘗試發送查詢字符串作爲POST的一部分。反正它不會工作。如果你需要發送nodeId你有2個選項;

  1. 將其作爲URL路徑發送:/path/to/ajaxDeployChapter.action/27623
  2. 創建隱藏表單字段nodeId並填充其值。
相關問題