在html页面中,我有以下复选框:
<input name="serviceareas" type="checkbox" id="cb1" value="1">
<input name="serviceareas" type="checkbox" id="cb2" value="2">
...
在jquery的帮助下,我为所有选中的复选框创建了javascript数组值
getSelectedValues : function() {
var allVals = [];
$('#checkboxTable :checked').each(function() {
allVals.push($(this).val());
});
//alert("allVals: "+allVals);
return allVals;
}
,并将其发送给Struts 2 Action。例如,在firebug请求中,我看到: -
服务区21,26,30
在Action中我尝试将其映射到
private List<String> serviceareas = new ArrayList<String>();
但是SOP将其打印为Object并且无法将其转换为java List
public class CreateEventAction extends ActionSupport {
private List<String> serviceareas = new ArrayList<String>();
public List<String> getServiceareas() {
return serviceareas;
}
public void setServiceareas(List<String> serviceareas) {
this.serviceareas = serviceareas;
}
@Override
public String execute() throws Exception {
if(this.serviceareas != null) {
for (String serviceAreaId : this.serviceareas) {
System.out.println("String :"+serviceAreaId);
}
}
return SUCCESS;
}
输出: 字符串:21,26,30
请帮忙。提前谢谢。
答案 0 :(得分:2)
假设您提交行动有效,请尝试构建您的参数:
serviceareas=21&serviceareas=26&serviceareas=30
答案 1 :(得分:1)
Aleksandr M's answer应该有效。我发布这个答案只是为了更清楚地说明如何实现它。
不是提交javascript数组,而是提交字符串。
getSelectedValues : function() {
var allVals = '';
$('#checkboxTable :checked').each(function() {
allVals += "serviceareas="+$(this).val()+"&"; //prepare the string
});
if(allVals.length>0){
allVals = allVals.substring(0,allVals.length-1); //remove last '&'
}
return allVals; //submit this string as parameter
}
答案 2 :(得分:0)
我认为这是不可能的。当你提交一个在servlet中有一个复选框或多个列表的表单时,我们通常会调用getPrameterValues()
,这个方法在内部将昏迷的字符串转换为和数组,并将其作为字符串数组返回。但是在你的情况下,你只需提交一个逗号分隔的字符串和动作servlet调用interanlly调用getPrameter()
,所以它将是一个刺痛并用一个字符串初始化你的List。要完成它,您必须提交具有复选框组的表单。
在这里你可以通过在你的动作类中拆分这个昏迷分离的字符串来快速修复....或者你需要找到如何在actionFor(struts 1.2)中提交相应属性的方式。让我快速反驳struts 2.无论如何当前的方法是错误的。