将带有索引属性的arraylist从jsp发布到action类的问题

时间:2015-12-15 03:18:22

标签: java jquery jsp arraylist struts

我遇到这个问题,我在隐藏的输入中动态生成了值,如下所示:

<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将这些附加到items-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;
    }
}

这是具有这些项的ArrayList的表单类

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;
    }

}

最后是动作类

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
    }

}

我希望在post上所有服务器都会将所有selectedItem [X]四舍五入并调用getSelectedItem来构建arraylist并填充它然后将属性设置为每个对象但是当我在调试时提交页面时,我看到selectedList arraylist出现空白。我使用的是基于先前赋值的逻辑,而是在首次加载页面时生成带索引属性的信息,然后使用logic:iterate标签打印,然后每个输入都有一个索引=&#34; true&#34 ;属性,但因为在这种情况下它来自用户点击页面,我改为使用jquery来填写&#34; items-div&#34;用户选择的是什么,但它应该是相同的没有?我错过了什么吗?以前跑得很好......谢谢你的时间。

编辑:如果我在jsp页面中硬编码测试隐藏的输入,它会提交但不是动态创建并附加jquery的那些。

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

1 个答案:

答案 0 :(得分:0)

我以前应该知道,但显然这是一个安全措施,只允许最初渲染的元素被回发,所以我硬编码的工作得很好,但任何其他附加后 - 渲染将不会提交所以我可能必须将对象放在一个对象数组中,JSONfiy它们并使用现有的隐藏输入将它们作为字符串发送到动作类。