2015-12-15 14 views
0

我有這個問題,我已動態生成的隱藏的輸入值,就像這樣:問題與JSP發佈與索引屬性的ArrayList到動作類

<div id="items-div" class="selection-div"> 
    <input name="selectedItem[0].articleName" id="selectedItem" type="hidden" value="cereal"></input> 
    <input name="selectedItem[0].quantity" id="selectedItem" type="hidden" value="2"></input> 
    <input name="selectedItem[1].articleName" id="selectedItem" type="hidden" value="yogurt"></input> 
    <input name="selectedItem[1].quantity" id="selectedItem" type="hidden" value="10"></input> 
</div> 

我使用jQuery這些追加的項目-DIV取決於用戶在屏幕上選擇的內容,每一個都是一個Item。

public class Item { 

    private String articleName = ""; 
    private int quantity = 0; 

    public String getArticleName() { 
     return articleName; 
    } 
    public void setArticleName(String articleName) { 
     this.articleName = articleName; 
    } 
    public int getQuantity() { 
     return quantity; 
    } 
    public void setQuantity(int quantity) { 
     this.quantity = quantity; 
    } 
} 

這是具有這些項目

public class CreateArticleForm extends ActionForm { 

    private ArrayList<Item> selectedList = new ArrayList<Item>(); 

    public Item getSelectedItem(int index) { 
     if (selectedList == null) { 
      selectedList = new ArrayList<Item>(); 
     } 
     while (index >= selectedList.size()) { 
      selectedList.add(new Item()); 
     } 

     return (Item) selectedList.get(index); 
    } 
    public ArrayList<Item> getSelectedList() { 
     return selectedList; 
    } 
    public void setSelectedList(ArrayList<Item> selectedList) { 
     this.selectedList = selectedList; 
    } 

} 

最後動作類的ArrayList窗體類

public class CreateArticleAction extends 
     Action { 

    public ActionForward executeAction(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response, User user) 
      throws Throwable { 

      CreateArticleForm articleForm = (CreateArticleForm) form; 
      //... do stuff 
    } 

} 

我預計在後所有的服務器將圓取出所有selectedItem [X]並調用getSelectedItem來構建數組列表並填充數組,然後將屬性設置爲每個對象,但是當我在調試時提交頁面時,我會看到selectedList arraylist co消除空虛。我正在使用這個基於前一個任務的邏輯,其中帶有索引屬性的信息是在第一次加載頁面時生成的,然後用logic:iterate標記打印,然後每個輸入都有一個indexed =「true」屬性,但是由於在這種情況下,它是從用戶點擊的頁面上,我反而用jquery填寫用戶選擇的「items-div」,但它應該是相同的?我錯過了什麼嗎?它以前運行得很好......謝謝你的時間。

編輯:上述工作,如果我硬編碼測試jsp頁面中的隱藏輸入,它會提交那些動態創建和附加jQuery的那些。

$('.items-div').append($('<input/>').attr({ 
type : 'hidden', name: 'selectedItem['+index+'].articleName', id : 'selectedItem', value: objItem.articleName})); 
+0

在您生成的代碼中,頁面上每個元素的ids應該是唯一的。此外,輸入標籤不具有單獨的關閉標籤。 – Bindrid

+0

謝謝!我將刪除這些ID並查看是否這是使它無法正常工作的問題 至於輸入,我注意到這一點以及它給我帶來了困擾,因爲我使用下面的代碼來追加這些輸入,並且應該將它們發佈爲但是當我加載頁面,他們看起來像那樣... '$('。selection-div')。append($('').attr({' 'type:'hidden',名稱:'selectedItem ['+ index +']。articleName',id:'selectedItem',value:objItem.articleName}));' – Ricardo

+0

沒有骰子,只在當前工作,如果我硬編碼的輸入,但不與附加jQuery ... – Ricardo

回答

0

,因爲之前我應該​​早就知道,但顯然這是一個安全措施,只允許原已呈現被調回元素,所以我硬編碼的那些工作得很好,但其他任何附加-after-rendering將不會被提交,因此我可能必須將對象放入一個對象數組中,JSON使用現有的隱藏輸入將它們作爲字符串發送到操作類。