2014-09-05 52 views
1

我向同事解釋瞭如何通過使用索引獲取列表數據從JSP頁面返回到操作類的方式,如herehere所解釋的。他自己並不完全理解和摸索,直到他突然通過不使用索引完成工作!Struts2從JSP向Action類發送列表數據:替代方式

他在JSP頁面中他有:

<input type="checkbox" name="contactNameList" value="someValue1"> 
<input type="checkbox" name="contactNameList" value="someValue2"> 
<input type="checkbox" name="contactNameList" value="someValue3"> 
<input type="checkbox" name="contactNameList" value="someValue4"> 

在他的動作類,他有 'appropiate' 制定者:

public List<String> getContactNameList() 

public void setContactNameList(List<String> list) 

我百思不得其解,爲什麼這項工作。我認爲這有效,因爲他發送非bean數據(在這種情況下字符串),並有一個智能構建到Struts2/OGNL追加值列表,而不是覆蓋它們。

任何人都可以非常詳細地解釋這個「無指數」情況下背後隱藏的是什麼?字符串列表是如何實例化的並使用上面的代碼片段進行填充?

+1

那麼爲什麼它不應該工作?如果你有一個列表,你總是可以調用'add'方法來向列表中添加一個元素,但是如果你需要改變/更新列表中的特定元素(在某個索引處)呢?你將如何引用該元素? – 2014-09-05 18:04:57

+0

在動作類中,結果是一個字符串列表。我們不需要專門引用任何字符串,只是遍歷整個集合。無論如何,我很好奇java代碼中發生了什麼。何時以及如何調用add方法? struts2如何知道它不應該每次都用新的空白列表覆蓋列表?當使用索引時,這很清楚,但沒有我沒有看到它。 – user1884155 2014-09-05 18:21:05

+0

你是什麼意思?每次你打電話時都會重新創建**。有索引或沒有它並不重要。 – 2014-09-05 18:24:37

回答

1

你應該明白,豆數據,而不是bean數據作爲參數傳遞給動作傳遞的。如果您實施ParameterAware,則參數的結構可以找到。

注意,對於一個給定的名稱的所有參數值將被退回,所以 對象的地圖類型是java.lang.String[]

然後XWork類型轉換盡最大努力將此映射轉換爲bean屬性。見Built in Type Conversion Support

框架中的例程類型轉換是透明的。通常, 您只需確保HTML輸入的名稱在OGNL表達式中可以使用 。 (HTML輸入是表單元素和其他 GET/POST參數。)

在沒有索引的情況下的參數的一個鍵下映射,而不是索引名稱下自己的名稱使用。

-1

你必須設置指標值在上面的代碼中

<input type="checkbox" name="contactNameList[0]" value="someValue1"> 
+0

不,這就是這個問題的全部,你不必爲它設置一個索引:),我覺得它很奇怪。 – user1884155 2014-09-06 08:50:14

+0

不,你不知道;當你不知道時,S2會注意到有多個值,迭代並添加到集合中。 – 2014-09-06 17:55:41

相關問題