因此,出于不同的原因,我无法尝试使用这两个元素中的任何一个。首先,我将描述s:checkboxlist
会发生什么。
如果sj:select
上的值发生更改,我想填充我的控制器上的列表以在我的s:checkboxlist
上使用,我是否必须使用javascript?我最初的猜测是在sj:select onchange=""
参数上调用javascript函数,然后在javascript函数上刷新s:checkboxlist
,以便使用新列表填充。
例如,如果我的sj:select
上有类似内容:
<s:url id="urlGetNewList"
action="mycontroller!getNewList" />
<sj:select href="%{urlGetNewList}" id="myselect"
onChangeTopics="reloadList"
onCompleteTopics="reloadList"
name="model.idType" list="types"
listKey="idType" listValue="nameType"
emptyOption="false" headerKey="-1"
headerValue="select a value"
formIds="frmMyForm" />
在我的s:checkboxlist
我有:
<s:checkboxlist name="arrayOfIds" list="idsType"
listKey="id" listValue="name"
theme="vertical-checkbox" />
所以我的s:select
从名为types的列表中填充,当sj:select
上的值发生更改时,我调用名为getNewList
的控制器上的函数,这将更改使用的列表我的复选框列表,但如何刷新复选框列表。
您可以注意到我可以使用sj:checkboxlist
来解决这个问题,我知道它可行,但如果我这样做,那么当我尝试加载通过整数数组idsType
检查的复选框时,复选框将不会被选中。例如,如果我有这样的Integer数组:
idsType = { 2, 3 }
我有一个包含5个元素的列表arrayOfIds
,然后当我使用s:checkboxlist
时,将显示5个复选框,并将检查第二个和第三个复选框。
但是,如果我使用sj:checkboxlist
执行此操作,则只会检查第一个复选框,并且复选框将根据sj:select
值进行动态更改,这在我使用{时不会发生{1}}。
我真的很想知道如何解决这个问题,如果有人可以提供帮助,我将非常感激。
答案 0 :(得分:1)
要回答第一个问题,当然您需要使用JavaScript来更新复选框列表 - 标准<s:checkboxlist>
完全不知道Ajax。您需要通过绑定到sj:select
发布的主题手动执行此操作。
插件wiki(假设这是你正在使用的插件,实际上有一些)有一个页面讨论how to handle JSON results in a topic。
<sj:checkboxlist>
可以通过听主题来重新加载;处理列表中的多个项目应该没有问题;您可能需要提供有关您尝试的内容以及出错的其他详细信息(例如,检查JavaScript控制台)。