h:commandLink无法更新Primefaces DataTable

时间:2017-03-14 14:08:03

标签: jsf primefaces jsf-2 datatable

我有以下xhtml:

<f:metadata>
    <f:viewParam name="livroId" value="#{livroBean.livro.id}" />
    <f:viewAction action="#{livroBean.carregarLivroPelaId}"
        if="#{param.livroId != null}" />
</f:metadata>


<ui:define name="titulo">
    <p:outputPanel>Novo Livro</p:outputPanel>
</ui:define>

<ui:define name="conteudo">
    <h:form>

        <p:messages id="messages" />

        <p:fieldset legend="Dados do Livro">
            <p:panelGrid columns="2">

                <p:outputLabel value="Titulo:" for="titulo" />
                <p:inputText id="titulo" value="#{livroBean.livro.titulo}"
                    required="true" requiredMessage="Título obrigatório"
                    validatorMessage="Título não pode ser superior a 40">
                    <f:validateLength maximum="40" />
                    <f:ajax event="blur" render="messages" />
                </p:inputText>

                <p:outputLabel value="ISBN:" for="isbn" />
                <p:inputMask id="isbn" value="#{livroBean.livro.isbn}"
                    validator="#{livroBean.comecaComDigitoUm}"
                    mask="999-9-99-999999-9" />

                <p:outputLabel value="Preço:" for="preco" />
                <p:inputText id="preco" value="#{livroBean.livro.preco}" />

                <p:outputLabel value="Data de Lançamento:" for="dataLancamento" />
                <p:calendar id="dataLancamento"
                    value="#{livroBean.livro.dataLancamento.time}"
                    pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo" mask="true" />

            </p:panelGrid>

        </p:fieldset>

        <br />

        <p:fieldset legend="Dados do Autor">

            <p:panelGrid columns="4">
                <p:outputLabel value="Selecione Autor:" for="autor" />
                <p:selectOneMenu value="#{livroBean.autorId}" id="autor">
                    <f:selectItems value="#{livroBean.autores}" var="autor"
                        itemLabel="#{autor.nome}" itemValue="#{autor.id}" />
                </p:selectOneMenu>
                <p:commandButton value="Gravar Autor"
                    action="#{livroBean.gravarAutor}" process="@this autor"
                    update="tabelaAutores" />

                <p:commandLink value="ou cadastrar novo autor"
                    action="#{livroBean.formAutor}" immediate="true" update="@all" />
            </p:panelGrid>

            <p:dataTable value="#{livroBean.autoresDoLivro}" var="autor"
                id="tabelaAutores" emptyMessage="Nenhum autor">
                <p:column>
                    <h:outputText value="#{autor.nome}" />
                </p:column>
                <p:column>
                    <p:commandLink value="X"
                        action="#{livroBean.removerAutorDoLivro(autor)}"
                        update="tabelaAutores" process="@this" />
                </p:column>
            </p:dataTable>
        </p:fieldset>

        <br />
        <h:panelGrid style="margin: 0 auto">
            <p:commandButton value="Gravar" action="#{livroBean.gravar}"
                process="@form" update="@form :formTabelaLivros:tabelaLivros" />
        </h:panelGrid>
    </h:form>

    <br />

    <h:form id="formTabelaLivros">
        <p:dataTable value="#{livroBean.livros}" var="livro"
            id="tabelaLivros" paginator="true" rows="5">

            <f:facet name="header">Livros</f:facet>
            <p:column headerText="Título" sortBy="#{livro.titulo}"
                filterBy="#{livro.titulo}" filterMatchMode="startsWith">
                <h:outputText value="#{livro.titulo}" />
            </p:column>

            <p:column headerText="ISBN" sortBy="#{livro.isbn}">
                <h:outputText value="#{livro.isbn}" />
            </p:column>

            <p:column headerText="Preço" sortBy="#{livro.preco}">
                <h:outputText value="#{livro.preco}">
                    <f:convertNumber type="currency" pattern="R$ #0.00"
                        currencySymbol="R$" locale="pt_BR" />
                </h:outputText>
            </p:column>

            <p:column headerText="Data" sortBy="#{livro.dataLancamento.time}">
                <h:outputText value="#{livro.dataLancamento.time}">
                    <f:convertDateTime pattern="dd/MM/yyyy"
                        timeZone="America/Sao_Paulo" />
                </h:outputText>
            </p:column>

            <p:column headerText="Alterar">
                <h:commandLink value="Alterar" action="#{livroBean.carregar(livro)}" />
            </p:column>

            <p:column headerText="Remover">
                <h:commandLink value="Remover" action="#{livroBean.remover(livro)}" />
            </p:column>

        </p:dataTable>
    </h:form>
</ui:define>

h:commandLink“Remover”实际上是从我的数据库中删除对象,但是没有更新DataTable。我已经设置了process="@form" update="@form",但它没有帮助。

它实际上工作正常,它突然停止了(我没有修改任何与我的bean相关的东西)。

编辑:

我将其更改为CommandButton,如下所示:

<p:column headerText="Remover">
    <p:commandButton icon="fa fa-fw fa-remove" actionListener="#{livroBean.remover(livro)}" process="@form" update="@form" />
</p:column>

但仍然没有结果......按钮有效,它会从我的数据库中删除条目,但它不会更新数据表。也尝试了行动=。

0 个答案:

没有答案