Как динамически обновлять h: selectManyCheckbox selectItems - PullRequest
1 голос
/ 24 августа 2010

Я пытаюсь реализовать сценарий с использованием JSF.У меня есть commandExButton, и когда пользователь нажимает эту кнопку «A», он показывает panelDialog, который содержит элементы selectManyCheckBox.Я сгенерировал эти элементы в бэкэнде, проанализировав один файл, который постоянно обновляется.Что я хочу, так это то, что всякий раз, когда я нажимаю эту кнопку «A», я должен получать последние selectItems, анализируя файл через бэкэнд-компонент.Но то, что я получаю, это тот же selectItem, который был сгенерирован при первой визуализации страницы.Итак, на данный момент у меня есть обходной путь, в котором я включил одну кнопку обновления, которая фактически обновляет страницу, а затем пользователь нажимает «A», чтобы получить последний элемент 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>

Код в компоненте:

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

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

1 Ответ

1 голос
/ 24 августа 2010

Сохраните List<SelectItem> selectItems в отдельном сессионном компоненте (при условии, что текущий является областью запроса), заполните его во время его создания и добавьте метод, подобный reload(), который вы вызываете только после обработки выбранный элемент в методе действия. Вы можете получить доступ к сессионному компоненту изнутри запроса, имеющего область действия, с помощью @ManagedProperty.

...