【发布时间】:2016-03-20 17:33:53
【问题描述】:
我遇到了这个问题,我在隐藏输入中动态生成了值,如下所示:
<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
}
}
我希望在发布后,所有服务器都会汇总所有 selectedItem[X] 并调用 getSelectedItem 来构建数组列表并填充它,然后将属性设置为每个对象,但是当我在调试时提交页面时,我看到 selectedList 数组列表是空的。我正在使用基于先前分配的此逻辑,其中具有索引属性的信息是在第一次加载页面然后使用 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}));
【问题讨论】:
-
在您生成的代码中,页面上每个元素的 id 应该是唯一的。此外,输入标签不要有单独的关闭标签。
-
谢谢!我将删除这些 id 并查看是否是它无法正常工作的原因 至于输入,我也注意到了这一点,并且它困扰了我,因为我使用下面的代码来附加这些输入,并且它们应该发布为 但是当我加载页面时,它们看起来像那样...
$('.selection-div').append($('<input/>').attr({type : 'hidden', name: 'selectedItem['+index+'].articleName', id : 'selectedItem', value: objItem.articleName})); -
没有骰子,只有在我对输入进行硬编码时才能工作,但不能在附加了 jquery 的情况下工作......
标签: java jquery jsp arraylist struts