3

在 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。例如在萤火虫请求中,我看到:-

服务区 21,26,30

在我尝试将其映射到的操作中

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

请帮忙。提前致谢。

4

3 回答 3

2

假设您提交给操作有效,请尝试像这样构造您的参数:

serviceareas=21&serviceareas=26&serviceareas=30
于 2012-11-01T10:53:32.993 回答
1

Aleksandr M 的回答应该有效。我发布这个答案只是为了更清楚地说明如何实现它。

而不是提交 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
}
于 2012-11-01T12:28:51.110 回答
0

我认为这是不可能的。当您在我们通常调用的 servlet 中提交具有复选框或多个列表的表单时getPrameterValues(),此方法在内部将逗号分隔的字符串转换为和数组,并将其作为字符串数组返回。但是在您的情况下,您只需提交一个逗号分隔的字符串和动作 servlet 调用 interanlly call getPrameter(),所以这将是一个刺痛,并用一个字符串初始化您的列表。要完成它,您必须提交具有复选框组的表单。

在这里,您可以通过在您的操作类中拆分这个逗号分隔的字符串来进行快速修复......或者您需要找出如何在您的 actionFor(struts 1.2) 中使用相应属性提交的方式。让我快速参考一下struts 2。无论如何,目前的方法是错误的。

于 2012-11-01T09:33:40.953 回答