Jsf 如何动态刷新h:selectManyCheckbox selectItems

Jsf 如何动态刷新h:selectManyCheckbox selectItems,jsf,jsf-2,selectmanycheckbox,Jsf,Jsf 2,Selectmanycheckbox,我正在尝试使用JSF实现一个场景。我有一个commandExButton,当用户单击此按钮时,它会显示包含selectManyCheckBox项的panelDialog。我通过解析一个不断更新的文件,在后端bean中生成这些项。我想要的是,无论何时单击此按钮,我都应该通过后端bean解析文件来获取最新的selectItems。但我得到的和第一次呈现页面时生成的selectItem相同。所以到目前为止,我有一个变通方法,其中包括一个刷新按钮,该按钮实际刷新页面,然后用户单击一个按钮,通过解析当前文

我正在尝试使用JSF实现一个场景。我有一个commandExButton,当用户单击此按钮时,它会显示包含selectManyCheckBox项的panelDialog。我通过解析一个不断更新的文件,在后端bean中生成这些项。我想要的是,无论何时单击此按钮,我都应该通过后端bean解析文件来获取最新的selectItems。但我得到的和第一次呈现页面时生成的selectItem相同。所以到目前为止,我有一个变通方法,其中包括一个刷新按钮,该按钮实际刷新页面,然后用户单击一个按钮,通过解析当前文件的内容来获取最新的selectItem。但是,在没有添加新按钮和使用现有按钮的情况下,它在任何情况下都是可行的吗

下面是我正在使用的代码

<td>
    <hx:commandExButton id="preferenceButton" styleClass="form" value="#{nls.preferenceLink}"
        title="#{nls.preferenceLinkTitle}" type="submit" />
</td>
<td>
    <h:form id="PrefForm" rendered="#{Test.isCurrent}">
        <hx:panelDialog type="modal" id="preferenceSet" styleClass="panelDialog" for="preferenceButton"
            title="#{nls.preferenceDialogTitle}">
            <h:outputText styleClass="panelStartMessage" style="display:block;"
                value="#{nls.preferenceDialogWindowText}" />
            <h:panelGroup rendered="#{Test.hasSelectItem }"
                style="display:block;width:300px;height:360px;overflow:auto;" styleClass="panelGroup"
                id="prefPanelGroup">
                <h:selectManyCheckbox value="#{Test.selectedItems}" layout="pageDirection">
                    <f:selectItems value="#{Test.selectItems}" />
                </h:selectManyCheckbox>
            </h:panelGroup>
            <hx:panelBox styleClass="information_box" id="noCommandWindow" layout="lineDirection"
                rendered="#{!Test.hasSelectItem }">
                <h:outputText styleClass="outputText" id="cmdInfo" value="#{nls.noCommands}" />
            </hx:panelBox>
            <hx:panelBox id="buttonBox1" styleClass="panelStartBox" layout="lineDirection">
                <hx:commandExButton id="submitPref" styleClass="commandExButton" type="submit"
                    value="#{nls.submit}" action="#{Test.action}">
                    <hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet"
                        id="behaviorSubmitPref" />
                </hx:commandExButton>
                <hx:commandExButton id="CancelPref" styleClass="commandExButton" type="submit"
                    value="#{nls.cancel}" action="Test">
                    <hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet"
                        id="behaviorCancelPref" />
                </hx:commandExButton>
            </hx:panelBox>
        </hx:panelDialog>
    </h:form>
</td>
Bean中的代码:

public class Test{
    private List<String> selectedItems;
    private List<SelectItem> selectItems;

    public List<SelectItem> getSelectItems() {
        // populate the selectItem here...
    }    
}

将列表selectItems存储在一个单独的会话范围bean中(假设您当前的bean是请求范围的bean),在其构造过程中填充它,并添加一个类似reload的方法,只有在处理action方法中的选定项后才调用该方法。您可以通过@ManagedProperty从请求范围内逐个访问会话范围bean。

将列表selectItems存储在单独的会话范围bean中,假设您当前的会话范围bean为请求范围,在其构造期间填充它,并添加一个类似于reload的方法,只有在处理action方法中的选定项后才能调用该方法。您可以通过@ManagedProperty从请求范围内访问会话范围bean。

Hi BalusC,谢谢您的回复。我当前的bean仅在会话范围内。我尝试将action和actionListener方法绑定到selectItems,然后在面板对话框中显示最新的复选框select item。但是button根本没有调用bean方法,我在这里实际上被卡住了。有没有其他方法?在构建过程中填充它并添加一个类似于重载的方法-那么我应该绑定这个方法的哪个组件?我应该添加另一个按钮并附加这个刷新按钮吗?但在这种情况下,它将刷新整个页面,我想避免。我是JSF新手,所以如果我不理解这里的任何明显内容,请接受我有限的知识。嗨,巴卢斯,谢谢你的回复。我当前的bean仅在会话范围内。我尝试将action和actionListener方法绑定到selectItems,然后在面板对话框中显示最新的复选框select item。但是button根本没有调用bean方法,我在这里实际上被卡住了。有没有其他方法?在构建过程中填充它并添加一个类似于重载的方法-那么我应该绑定这个方法的哪个组件?我应该添加另一个按钮并附加这个刷新按钮吗?但在这种情况下,它将刷新整个页面,我希望避免这种情况。我是JSF新手,所以如果我不理解这里的任何明显内容,请记住我有限的知识。