使用sj:select with s:checkboxlist

时间:2011-10-31 17:37:43

标签: jquery struts2 controller checkboxlist checked

因此,出于不同的原因,我无法尝试使用这两个元素中的任何一个。首先,我将描述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}}。

我真的很想知道如何解决这个问题,如果有人可以提供帮助,我将非常感激。

1 个答案:

答案 0 :(得分:1)

要回答第一个问题,当然您需要使用JavaScript来更新复选框列表 - 标准<s:checkboxlist>完全不知道Ajax。您需要通过绑定到sj:select发布的主题手动执行此操作。

插件wiki(假设这是你正在使用的插件,实际上有一些)有一个页面讨论how to handle JSON results in a topic

<sj:checkboxlist>可以通过听主题来重新加载;处理列表中的多个项目应该没有问题;您可能需要提供有关您尝试的内容以及出错的其他详细信息(例如,检查JavaScript控制台)。