Struts2 Jquery 多个 Select 值

Struts2 Jquery Multiple Select Value

本应非常简单的事情让我很不爽。我正在使用 Struts2 Jquery 插件,我的页面上有一个 <sj:select>。它设置为 multiple。我有一组值,我想预先 selected,但没有设置任何内容。如果我在值标签中给它一个单项,则该单项是 selected。如果我传递 IntegersArrayListIntegerCollection (仍然是 ArrayList 的实例)或逗号分隔的字符串(“100,101,102” ) 到值,什么都没有 selected。我已经尝试传递一个简单的整数数组 (Integer[]),这至少会 select 数组中的第一项,仅此而已。所有其他人显然都被丢弃了。我不明白我做错了什么,或者我可以做些什么来完成这项工作。

<sj:select 
    href="%{myStrutsJSONAction}"
    id="itemSelect"
    formIds="editForm"
    reloadTopics="reloadItem"
    name="selectedString"
    list="availableItems"
    listKey="id"
    listValue="description"
    multiple="true"
    cssClass="form-control"
    value="selectedIds"
    />

这最初是一个常规的 Struts2 select (<s:select>) 并且在将 IntegersArrayList 传递给值标签的情况下工作得很好.我已经更改为 Jquery 插件版本,因为我需要根据单独列表的值重新加载数据。

reloadTopics 工作正常,正在重新填充数据,当表单提交时,我所有的 selection 都正确地传回服务器。但是当页面加载时,最初什么都没有 selected。

查看插件的源代码,目前似乎不支持一次预选多个值。

您可以在这个插件的 the GitHub repo 中注册一个新问题。

至于解决方法,您可能可以使用一些额外的 JavaScript 代码来完成。

问题的正确答案。我只是发布解决方法,以防有人遇到同样的问题。

最快最简单的解决方案是将您的值放入将发送到页面的以逗号分隔的字符串中。

public String strutsActionToLoadPage() {
    List<Integer> selectedItemIds = new ArrayList<Integer>();
    /*
     * Prepare your data for the page
     */

    /*
     * Set up the comma-delimited string
     */
    this.selectedItemString = "";
    for (int y = 0; y < (selectedItemIds.size()-1); y++) {
        this.selectedItemString += selectedItemIds.get(y) + ",";
    }
    if (!selectedItemIds.isEmpty()) {
        this.selectedItemString += selectedItemIds.get(selectedItemIds.size()-1);
    }
    return SUCCESS;
}

public String getSelectedItemString() {
    return this.selectedItemString;
}
public void setSeletedItemString(String selectedItemString) {
    this.selectedItemString = selectedItemString;
}

然后,使用 javascript,将字符串转换为数组,并在文档准备好后设置 <sj:select> 元素的 val()

$(document).ready(function() {
     var data = '<s:property value="selectedItemString" />';

     //Make an array, splitting on the commas
     var dataArray = data.split(",");

     // Set the value
     $("#itemSelect").val(dataArray);
});

This question 帮助我解决了这个问题。

不太理想,但功能正常。

在 jsp

中使用 jquery 拆分字符串变量
$(document).ready(function() {

  var subAns = $("#submitedAnswer").val();

  var toSplit = subAns.split(",");
     for (var i = 0; i < toSplit.length; i++) {
      console.log(toSplit[i]);
     ..........
     ..........
  }
});