【问题标题】:PrimeFaces dataTable doesn''t render when exists binding attributePrimeFaces 数据表在存在绑定属性时不呈现
【发布时间】:2011-12-02 15:03:52
【问题描述】:

我正在创建一个包含两个 dataTable 的 dataTable :)。

但是这次我尝试在包装第一个 dataTable 的 h:panelGroup 中使用绑定属性时遇到问题。 我正在使用绑定来帮助刷新 panelGroup,就像 BalusC 在 this question 中所说的那样。当我删除绑定属性时,dataTable 会正常呈现,但当然不会使用 dataTables 中的 f:ajax 标签呈现任何内容。

这里是 xhtml:

<ui:component>
<h:panelGroup>
    <h:panelGroup layout="block;" id="#{id}"
        binding="#{painelTabelaContatos}" rendered="true">
        <p:dataTable id="tabela#{id}"
            value="#{modeloTabelaContatos.listaDeContatos}" var="contato"
            selectionMode="single"
            rowSelectListener="#{controladorTabelaContatos.processarSelecaoLinha}"
            rowUnselectListener="#{controladorTabelaContatos.processarDeselecaoLinha}"
            selection="#{modeloTabelaContatos.contatoSelecionado}">
            <p:column headerText="Contatos">
                <hrgi:editableText style="width:100%" value="#{contato.descricao}" />
            </p:column>
            <p:column headerText="Telefones">
                <h:dataTable value="#{contato.telefones}" var="telefone">
                    <h:column>
                        <h:inputText value="#{telefone}" />
                    </h:column>
                    <h:column>
                        <h:graphicImage library="img" name="default_trash.png"
                            style="cursor:pointer;">
                            <f:ajax event="click" render=":#{painelTabelaContatos.clientId}"
                                listener="#{controladorTabelaContatos.removerTelefone(contato, telefone)}" />
                        </h:graphicImage>
                    </h:column>
                </h:dataTable>
            </p:column>
            <p:column headerText="e-mails">
                <h:dataTable value="#{contato.emails}" var="email">
                    <h:column>
                        <h:inputText value="#{email}" />
                    </h:column>
                    <h:column>
                        <h:graphicImage library="img" name="default_trash.png"
                            style="cursor:pointer;">
                            <f:ajax event="click" render=":#{painelTabelaContatos.clientId}"
                                listener="#{controladorTabelaContatos.removerEmail(contato, email)}" />
                        </h:graphicImage>
                    </h:column>
                </h:dataTable>
            </p:column>
            <p:column>
                <h:graphicImage library="img" name="default_trash.png"
                    style="cursor:pointer;">
                    <f:ajax render=":#{painelTabelaContatos.clientId}" event="click"
                        listener="#{controladorTabelaContatos.removerContato(contato)}" />
                </h:graphicImage>
            </p:column>
        </p:dataTable>
    </h:panelGroup>
    <h:panelGroup layout="block">
        <p:commandButton value="ADICIONAR CONTATO" update="#{id}"
            immediate="true"
            action="#{controladorTabelaContatos.adicionarContato}" />
        <p:commandButton value="ADICIONAR TELEFONE" update="#{id}"
            immediate="true"
            action="#{controladorTabelaContatos.adicionarTelefone}" />
        <p:commandButton value="ADICIONAR E-MAIL" update="#{id}"
            immediate="true"
            action="#{controladorTabelaContatos.adicionarEmail}" />
    </h:panelGroup>
</h:panelGroup>
</ui:component>

我已经尝试删除 p:dataTable 中的 h:dataTables,但没有成功。 该组件只是 PrimeFaces 选项卡的内容,并且此选项卡位于 PrimeFaces 对话框中。有人可以解释一下为什么会这样吗?

【问题讨论】:

  • 你提到它有效?唯一的区别是您现在为&lt;h:panelGroup&gt; 分配了一个动态ID 而不是静态ID。也许 ID 来自一个在您发送 ajax 请求时不再存在的来源?
  • 是我的错。我做错了。
  • 干得好,很好,你把它发布为答案:)

标签: ajax jsf jsf-2 datatable primefaces


【解决方案1】:

我找到了错误的原因,之后很容易找到解决方案...... 问题是因为我在两个不同的页面中调用了这个组件:

popupCadatroPessoa.xhtml

<ui:include src="../tabs/abaEdicaoContatos.xhtml">
    <ui:param name="id" value="painelContatoPessoa" />
</ui:include>

在popupCadastroFuncionario.xhtml中

<ui:include src="../tabs/abaEdicaoContatos.xhtml">
    <ui:param name="id" value="painelContatoFuncionario" />
</ui:include>

因为我并没有真正创建绑定 bean,所以 JSF 会感到困惑。所以我刚刚创建了两个 UIPanel bean 并将其作为参数传递:

<ui:include src="../tabs/abaEdicaoContatos.xhtml">
    <ui:param name="id" value="painelContatoPessoa" />
    <ui:param name="painelTabelaContatos" value="#{bindingTabelaContatoPessoa}"/>
</ui:include>

是我的错。感谢您的关注,给您带来的不便深表歉意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2011-08-02
    • 2020-03-08
    • 2012-01-21
    相关资源
    最近更新 更多