Возможно ли условное отображение компонентов внутри данных без обновления всего данных? - PullRequest
1 голос
/ 10 января 2012
<h:dataTable value="#{bean.listOfRows}" var="eachRow" id="theDataTable">
  <h:column>
        <p:outputPanel rendered="#{eachRow.visible}">
              <h:selectManyCheckbox 
                    value="#{xxxx}"
                    label="#{xxxx}">
                    <f:selectItems value="#{checkBoxItems}" var="eachItem" itemLabel="#{eachItem.label}" itemValue="#{eachItem.value}" />
                    <p:ajax event="change" update="theDataTable" />
              </h:selectManyCheckbox>
        </p:outputPanel>
        <p:outputPanel rendered="#{eachRow.visible}">
              <h:selectOneRadio 
                    value="#{xxxx}"
                    label="#{xxxx}">
                    <f:selectItems value="#{radioItems}" var="eachItem" itemLabel="#{eachItem.label}" itemValue="#{eachItem.value}" />
                    <p:ajax event="change" update="theDataTable" />
              </h:selectOneRadio>
        </p:outputPanel>

        <p:outputPanel rendered="#{eachRow.visible}">
        </p:outputPanel>
        <p:outputPanel rendered="#{eachRow.visible}">
        </p:outputPanel>
        <p:outputPanel rendered="#{eachRow.visible}">
        </p:outputPanel>
        <p:outputPanel rendered="#{eachRow.visible}">
        </p:outputPanel>
    .
    .
    .

  </h:column>                                     
</h:dataTable>

В наборе строк таблицы данных некоторые строки должны быть визуализированы в зависимости от СОБЫТИЙ ИЗМЕНЕНИЯ ЗНАЧЕНИЯ (обработанных с использованием запросов AJAX) в компоненте ввода предыдущей строки.Могу ли я сделать эти строки видимыми без повторного рендеринга всей таблицы данных???Я использую JSF 2.0.6 с PrimeFaces 2.2.1.

1 Ответ

0 голосов
/ 22 января 2012

В соответствии с предложением BalusC для этого вопроса ссылка использовать заполнение в столбце данных таким образом.

<h:dataTable id="mainDatatable" value="#{bean.listOfRows}" var="eachRow" id="theDataTable">
  <h:column>
    <h:panelGroup id="padding" layout="block">
      <p:outputPanel rendered="#{eachRow.visible}">
          <h:selectManyCheckbox 
                value="#{xxxx}"
                label="#{xxxx}">
                <f:selectItems value="#{checkBoxItems}" var="eachItem" itemLabel="#{eachItem.label}" itemValue="#{eachItem.value}" />
                <p:ajax event="change" update="theDataTable" />
          </h:selectManyCheckbox>
      </p:outputPanel>
    <p:outputPanel rendered="#{eachRow.visible}">
          <h:selectOneRadio 
                value="#{xxxx}"
                label="#{xxxx}">
                <f:selectItems value="#{radioItems}" var="eachItem" itemLabel="#{eachItem.label}" itemValue="#{eachItem.value}" />
                <p:ajax event="change" update="theDataTable" />
          </h:selectOneRadio>
    </p:outputPanel>

    <p:outputPanel rendered="#{eachRow.visible}">
    </p:outputPanel>
    <p:outputPanel rendered="#{eachRow.visible}">
    </p:outputPanel>
    <p:outputPanel rendered="#{eachRow.visible}">
    </p:outputPanel>
    <p:outputPanel rendered="#{eachRow.visible}">
    </p:outputPanel>
.
.
.
    </h:panelGroup>
  </h:column>                                     
</h:dataTable>

Объект данных создает заполнение для каждого компонента в столбце, независимо от того, визуализирован он или нет.Теперь дело за вашей зависимой логикой.Если вы хотите обновить определенную строку таблицы данных, используйте идентификатор клиента, сгенерированный из базового компонента или привязав компонент к компоненту, как это было предложено BalusC в этом вопросе .Идентификатор клиента будет иметь формат mainDatatable: rowIndex: padding.Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...