我有一段时间的事情应该非常简单。我使用的是Struts2 Jquery插件,我的页面上有一个<sj:select>
。它设置为multiple
。我有一个我希望预先选择的值数组,但没有设置任何值。如果我在value标签中给它一个项目,则选择该单个项目。如果我传递ArrayList
Integers
,或Collection
Integer
(仍为ArrayList
的实例)或以逗号分隔的字符串(&#34) ; 100,101,102&#34;)到该值,没有选择任何内容。我已经尝试传递一个简单的整数数组(Integer[]
),这至少会选择数组中的第一个项目,但那就是它。所有其他人显然都被丢弃了。我无法理解我做错了什么,或者我能做些什么来使这项工作。
<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选择(<s:select>
),并且传递给值标记的ArrayList
Integers
完全正常。我已经更改为Jquery插件版本,因为我需要根据单独列表的值重新加载数据。
reloadTopics
工作正常,数据正在重新填充,当表单提交时,我的所有选择都会正确传递回服务器。但是在页面加载时最初没有选择任何内容。
答案 0 :(得分:1)
答案 1 :(得分:1)
问题的正确答案。我只是发布了解决方法,以防任何人遇到同样的问题。
最快捷,最简单的解决方案是将您的值放入以逗号分隔的字符串中,该字符串将发送到该页面。
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,将字符串转换为数组,并在文档准备就绪时设置val()
元素的<sj:select>
。
$(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帮助了我。
不太理想,但功能齐全。
答案 2 :(得分:0)
使用jsp
中的jquery分割String变量$(document).ready(function() {
var subAns = $("#submitedAnswer").val();
var toSplit = subAns.split(",");
for (var i = 0; i < toSplit.length; i++) {
console.log(toSplit[i]);
..........
..........
}
});