Javascript jquery-select2显示默认选择的第一个值

Javascript jquery-select2显示默认选择的第一个值,javascript,jquery,html,jsp,struts2,Javascript,Jquery,Html,Jsp,Struts2,我使用以下代码填充multi-select: <s:select id = "deviceTypes" name = "serviceVO.deviceTypes" multiple = "multiple" required = "true" onBeforeTopics = "openLoader" onCompleteTopics = "closeLoader" key = "serv

我使用以下代码填充multi-select:

    <s:select id = "deviceTypes" 
            name = "serviceVO.deviceTypes"
        multiple = "multiple" 
        required = "true"
  onBeforeTopics = "openLoader" 
onCompleteTopics = "closeLoader"
             key = "service.authoring.label.deviceTypes"
         tooltip = "%{getText('service .authoring.label.deviceTypes.info')}"
            list = "deviceTypesList" 
         listKey = "value" 
       listValue = "name"
        cssClass = "search-val form-control" />

有了这个,它会在默认情况下显示我不想要的页面加载时选择的第一个选项值。我希望用户选择值,一旦用户提交表单,则在“修改”页面上,所选值应显示在选择框中,用户可以添加或删除值。

键属性是使用相同值设置三个属性的简写:
名称
标签

您应该知道,
value
(如果存在)预设元素的值,而
name
用于将参数发送回操作,并在缺少
value
时预设值

然后,将
与上述属性之一结合使用会产生误导,而且是错误的
放下
,改用
标签

    <s:select id = "deviceTypes" 
            name = "serviceVO.deviceTypes"
        multiple = "multiple" 
        required = "true"
  onBeforeTopics = "openLoader" 
onCompleteTopics = "closeLoader"
           label = "service.authoring.label.deviceTypes"
         tooltip = "%{getText('service .authoring.label.deviceTypes.info')}"
            list = "deviceTypesList" 
         listKey = "value" 
       listValue = "name"
        cssClass = "search-val form-control" />


请注意,
serviceVO.deviceTypes
必须是一个操作属性,其getter类型为List(或其他类型),第一次为null,并且在下次读取时包含所选值

还是没有得到你想要的

但我认为您可以通过一些java脚本代码来实现这一点。 创建一个
s:select
sj:select
,其中包含所有数据的选项,但通过
style=“display:none”
使其不可见。将第二个选择框设为普通
html选择
,并使用空选项,这是用户看到的。因此,当页面加载但用户无法看到时,您的主选择框将在第一次加载

您可以使用户执行某些操作使其可见,例如单击复选框


但是,提交表单不会将所有选择选项传递给服务器,只有选择的选项才会发送给服务器

我可以在页面加载时使用以下代码:

$("#deviceTypes").attr("multiple","true");
$("#deviceTypes").select2();
var selectedDevice=[];
var deviceList = '<s:property value="serviceVO.packagedService.deviceType" />';
$.each(deviceList, function(index,value) {
    selectedDevice.push(value); 
    });
 $("#deviceTypes").select2("val", selectedDevice);
$(“#设备类型”).attr(“多个”、“真”);
$(“#设备类型”)。选择2();
var selectedDevice=[];
var deviceList=“”;
$.each(设备列表、函数(索引、值){
选择设备推送(值);
});
$(“#设备类型”)。选择2(“val”,选择设备);

deviceTypesList在页面加载之前我正在填充。如果我已经有列表,那么默认情况下我可以显示空的选择,但是当用户单击选择框时,列表将显示。不确定这意味着什么。。。对我来说太神秘了,sorry@PracheerPancholi我想您希望您的选择框显示默认文本,例如
请选择设备类型
,或者仅选择一个简单的空选项作为第一个选项。我说的对吗@AlirezaFattahi我希望在页面加载时第一次使用空选项,然后当用户选择一些选项时,在提交表单后,这些选择的值只应出现在所有其他值中。同样,我不希望有ajax调用,因为我已经在action类中填充了值列表。@PracheerPanchoi我对代码感到困惑。您使用的是
s:select
还是
sj:select
s:select
没有
onBeforeTopics
onCompleteTopics
$("#deviceTypes").attr("multiple","true");
$("#deviceTypes").select2();
var selectedDevice=[];
var deviceList = '<s:property value="serviceVO.packagedService.deviceType" />';
$.each(deviceList, function(index,value) {
    selectedDevice.push(value); 
    });
 $("#deviceTypes").select2("val", selectedDevice);