在不更新整个数据表的情况下,是否有可能在数据表中进行有条件的组件渲染? [英] Is conditional rendering of components possible inside datatable without updating the entire datatable?

查看:108
本文介绍了在不更新整个数据表的情况下,是否有可能在数据表中进行有条件的组件渲染?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

<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>

在数据表的行集中,根据上一行输入组件上的VALUE CHANGE EVENTS(使用AJAX请求处理)来有条件地呈现一些行.我可以在不重新渲染整个数据表的情况下使这些行可见吗? ? ? 我正在将JSF 2.0.6和PrimeFaces 2.2.1一起使用.

Within the set of rows of the data table, some rows are to be conditionally rendered depending on the VALUE CHANGE EVENTS(processed using AJAX requests) on the previous row's input component. Can I make these rows visible without re-rendering the entire data table ? ? ? I am using JSF 2.0.6 with PrimeFaces 2.2.1.

推荐答案

正如BalusC针对此问题所建议的

As suggested by BalusC for this question link use padding in the datatable column like this.

<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在此

The datatable creates padding over every component in the column whether rendered or not. Now it is upto your dependent logic. If you want to update particular row of the datatable use the client id generated from a backing bean or binding the component to bean as suggested by BalusC in this question. The client id will be of the format mainDatatable:rowIndex:padding. Cheers!

这篇关于在不更新整个数据表的情况下,是否有可能在数据表中进行有条件的组件渲染?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆