Включение и отключение компонентов с помощью флажка выбора - PullRequest
6 голосов
/ 21 июля 2011

У меня есть компонент, и я пытаюсь отключить PanelGrid ниже.

<h:selectBooleanCheckbox id="checkboxId" value="#{bean.checked}">
    <p:ajax update="panelId" event="click"/>                                    
</h:selectBooleanCheckbox>
<h:panelGrid id="panelId" rendered="#{!bean.checked}">
    <h:outputLabel>some text</h:outputLabel>
    <h:outputLabel>#registrationBB.registrationModel.homeAddress.actualAddressMathWithRegistration}</h:outputLabel>
</h:panelGrid>

В результате нажатие на флажок не имеет никакого эффекта. Индикатор проверки даже не отображается на компоненте-флажке и значении bean: флажок не отправляется на сервер. Я пытался использовать также. Индикатор проверки появился, но панель не обновилась

Как использовать обновление через флажок, верно?

Ответы [ 2 ]

13 голосов
/ 21 июля 2011

Вот пример, который я получил для работы:

<h:form>
    <h:selectBooleanCheckbox id="checkboxId" value="#{indexBean.checked}" >
        <p:ajax event="change" update="panelId" />
    </h:selectBooleanCheckbox>

    <h:panelGrid id="panelId" style="border:solid 1px black;" >
        <h:outputLabel rendered="#{!indexBean.checked}" >some text</h:outputLabel>
        <h:outputText rendered="#{!indexBean.checked}" value="some text 2" />
    </h:panelGrid>
</h:form>

Мне пришлось изменить событие <p:ajax> от щелчка до изменения, чтобы установить флажок. Другая проблема заключается в том, что если вы не визуализируете <h:panelGrid>, идентификатор не может быть найден для обновления, поэтому вы хотите переместить визуализированный атрибут в компоненты внутри вашего <h:panelGrid>, но при этом обновите <h:panelGrid>.

0 голосов
/ 14 февраля 2018

Небольшое отклонение.Ваше поле бина не должно быть логическим.Если у вас был компонент поддержки с полями:

private List<SelectItem> myStringList;
private String myString;

, то вы инициализируете myStringList следующим образом перед загрузкой формы:

myStringList = Arrays.asList(new SelectItem("one", "The Number One"),
                new SelectItem("two", "The number two")
        );

, тогда вы можете сделать это:

<h:form>
    <p:selectOneRadio id="ctlSearchType" value="#{mybean.myString}"  layout="grid" columns="3">
       <f:selectItems value="#{mybean.myStringList}" />
       <p:ajax event="change" update="ctlone,ctltwo"/>
    </p:selectOneRadio>

    <h:panelGrid id="panelId" style="border:solid 1px black;" >
       <p:outputLabel for="ctlone" value="Field one:"/>
       <p:inputText value="#{mybean.whatever}" id="ctlone" size="8" maxlength="10" disabled="#{mybean.myString eq 'one'}"/>
       <p:outputLabel for="ctltwo" value="Field two:"/>
       <p:inputText value="#{mybean.whatevertwo}" id="ctltwo" size="8" maxlength="10" disabled="#{mybean.myString eq 'two'}"/>                         
    </h:panelGrid>
</h:form>
...