2012-09-01 60 views
3

我有一個類型爲ArrayList的會話變量。 在jsp頁面中,我需要通過索引來訪問它以動態創建表單,但是在我提交表單後,我發現會話ArrayList的元素值沒有改變。如何通過表單中的索引訪問會話ArrayList?

這是我已經盡我JSP頁面上(我用Struts2框架):

<s:iterator value="anotherArray" status="RowsIterator"> 
<tr> 
    <td> 
    <s:iterator value="actionOptionsArray" status="iter"> 
    <s:radio 
    name="#session.chosenActionsArray[%{#RowsIterator.index}]" <!-- The concerned line --> 
    list="%{actionOptionsArray[#iter.index]}" 
    value="#{actionOptionsArray[0]}" 
    theme="simple" /> 
    <br> 
    </s:iterator> 
    </td> 
    <!-- other fields--> 
</tr> 
</s:iterator> 

anotherArray#session.chosenActionsArray具有相同的大小。

我想我錯了,但在我的情況下,按指數迭代它是一種義務。 非常感謝你提前:) :)

+0

我不認爲迭代是你的問題當然沒有生成的HTML誰可以說...沒有你提交給它的行動是很難創建一個具體的解決方案。 – Quaternion

+0

嗨!謝謝您的回答。那麼,我的行動正常,問題不在其中。我的問題是,我不知道如何在窗體中設置「ArrayList的ArrayList」(矩陣)的值。謝謝。 – Angelina

回答

1

你需要通過一個動作訪問會話,會話可以從jsp訪問,但不能通過這種方式直接從外部世界訪問。

讓您提交表單以執行SessionAware的操作。我將爲ArrayList創建一個getter/setter以及適當的驗證,然後通過execute方法將這些值移入會話中。我不喜歡將你的會話直接暴露給外部世界(在你的行動中爲會話提供一個setter)......如果你這樣做,你需要知道你可能已經讓惡意用戶訪問你的東西可能沒有預料到。

編輯

假設你有字符串的ArrayList中的ArrayList中調用的行動「矩陣」 ......你可以通過迭代特性:

<s:iterator value="matrix"> 
    <s:iterator> 
    <s:property/> 
    </s:iterator> 
</s:iterator> 

外迭代,迭代「矩陣」,它將每個實例推送到值棧的頂部。默認情況下,內部迭代器將使用堆棧頂部的屬性標記。把tr和td元素放在正確的地方,你可以渲染一張桌子。

要爲輸入元素(可能是隱藏的)生成正確的名稱屬性,你需要它們的形式爲矩陣[i] [j],其中i和j是整數,並且將定義合適的矩陣。正如你所做的那樣,使用迭代器的status屬性是生成索引的好方法。

+0

我有你的觀點,我同意你的看法。但問題是,在我的動作類中,我有一個數組,它在調用一個動作後獲取值,但它的壽命很短,當我調用第二個動作時,它顯示它已經有0作爲一個大小......這就是爲什麼我想到會話變量。另外,如果我可以在我的ArrayList的jsp頁面中爲我的ArrayList設置大小,那也是一個解決方案,但我不知道該怎麼做......謝謝。 – Angelina

+0

請提供代碼,具體比抽象工作要容易得多。您可能會發現在爲我們創建合適的演示程序時,如果問題得不到解決,問題就會解決。 – Quaternion