对话框内的数据表不是向bean发送数据

时间:2017-01-31 17:44:06

标签: jsf primefaces datatable xhtml javabeans

我正在尝试在对话框中创建一个选择数据表。但那没效果。我花了几个小时寻找解决方案,但我没有找到任何地方。

我只想创建一个表,当用户选择一行并单击 Selecionar 按钮时,对象项目将被发送到主bean。但它不会调用 set 方法。我试过很多方法来解决这个问题。他们都没有工作。

这是我的xhtml:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"                         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">

    <h:head>
    </h:head>
    <h:body>
        <p:dialog widgetVar="selecionar_produto_WV" modal="true"
        showEffect="clip">

            <form id="form_selecionar_produto">

                <p:dataTable var="produto" paginator="true" rows="5"
                    emptyMessage="Não existem produtos cadastrados!"
                    selectionMode="single" rowKey="#{produto.id}"
                    selection="#{selecionarProdutoMBean.produto}"
                    value="#{selecionarProdutoMBean.produtos}" id="table"
                    style="width:900px">

                    <p:column styleClass="l" headerText="Nome" sortBy="#{planta.nome}">
                        <p:outputLabel value="#{produto.nome}" />
                    </p:column>
                    <p:column styleClass="l" headerText="Descrição"
                sortBy="#{produto.descricao}">
                        <p:outputLabel value="#{produto.descricao}" />
                    </p:column>
                    <p:column styleClass="l" headerText="Valor"
                        sortBy="#{produto.valor}">
                        <p:outputLabel value="R$#{produto.valor}" />
                    </p:column>
                    <p:column styleClass="l" headerText="Produtor"
                        sortBy="#{produto.produtor.nome}">
                        <p:outputLabel value="#{produto.produtor.nome}" />
                    </p:column>
                    <p:column styleClass="l" headerText="Entrada"
                        sortBy="#{produto.entrada}">
                        <p:outputLabel value="#{produto.entrada}">
                            <f:convertDateTime pattern="dd/MM/yyyy" />
                        </p:outputLabel>
                    </p:column>
                    <f:facet name="footer">
                        <p:commandButton process="table" icon="ui-icon-circle-check"
                    value="Selecionar" oncomplete="PF('selecionar_produto_WV').hide();" />
                    </f:facet>
                </p:dataTable>
            </form>
        </p:dialog>
    </h:body>
 </html>

这是我的豆子:

@ManagedBean(name = "selecionarProdutoMBean")
@SessionScoped
public class SelecionarProdutoMBean {

private Produto produto;
private List<Produto> produtos;

@EJB
private IManterProdutoSBean<Produto> bean = new ManterProdutoSBean();

public SelecionarProdutoMBean() {
    produtos = new ArrayList<>();
    produto = new Produto();
}

public void onRowSelect(SelectEvent event) {
    Produto p = (Produto) event.getObject();
    System.out.println(p.getNome());
}

public List<Produto> getProdutos() {
    produtos = bean.listar();
    return produtos;
}

public void setProdutos(List<Produto> produtos) {
    this.produtos = produtos;
}

public Produto getProduto() {
    return produto;
}

public void atualizar() {
    System.out.println("789123");
}

public void setProduto(Produto produto) {
    this.produto = produto;
}

}

这是调用具有表

的对话框的对话框
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.org/ui">

    <h:head>
    </h:head>
    <h:body>
        <p:dialog widgetVar="iu01_13_01" modal="true" showEffect="clip">
            <p:ajax event="close" update="iu01_13_form"
            listener="#{iu01_13MBean.limpar()}" />

            <div id="template">
                <h:form id="iu01_13_01_form">
                    <p:panelGrid columns="2">

                        <p:outputLabel value="Nome:" />
                        <p:inputText id="Nome" value="#{iu01_13MBean.venda.nome}" />

                        <p:outputLabel value="Data de venda:" />
                        <p:calendar id="Registro" value="#{iu01_13MBean.venda.data}" />

                        <p:outputLabel value="Valor:" />
                        <p:inputText id="Valor" value="#{iu01_13MBean.venda.valor}" />

                        <p:outputLabel value="Detalhes:" />
                        <p:inputText id="Detalhes" value="#{iu01_13MBean.venda.detalhes}" />

                        <p:outputLabel value="Produto:" />
                        <p:panelGrid columns="2">
                            <p:commandButton actionListener="#{iu01_08MBean.updateList()}"
                                value="Selecionar produto" onclick="PF('selecionar_produto_WV').show();" />
                            <p:inputText id="Produto" value="#{iu01_08MBean.produto.nome}" />
                        </p:panelGrid>

                        <p:commandButton value="FINALIZAR" action="#{iu01_13MBean.salvar}"
                    update="iu01_13_01_form, iu01_13_form"
                            onclick="PF('iu01_13_01').close();" />
                        <p:outputLabel />
                    </p:panelGrid>
                </h:form>
            </div>

        </p:dialog>
        <ui:include src="selecionar_produto.xhtml" />
    </h:body>
 </html>

1 个答案:

答案 0 :(得分:0)

试试这个:

你的xhtml应该是这样的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"                         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.org/ui">

        <h:head>
        </h:head>
        <h:body>
 <h:form id="form_selecionar_produto">
            <p:dialog widgetVar="selecionar_produto_WV" modal="true"
            showEffect="clip">



                    <p:dataTable var="produto" paginator="true" rows="5"
                        emptyMessage="Não existem produtos cadastrados!"
                        selectionMode="single" rowKey="#{produto.id}"
                        selection="#{selecionarProdutoMBean.produto}"
                        value="#{selecionarProdutoMBean.produtos}" id="table"
                        style="width:900px">

                        <p:column styleClass="l" headerText="Nome" sortBy="#{planta.nome}">
                            <p:outputLabel value="#{produto.nome}" />
                        </p:column>
                        <p:column styleClass="l" headerText="Descrição"
                    sortBy="#{produto.descricao}">
                            <p:outputLabel value="#{produto.descricao}" />
                        </p:column>
                        <p:column styleClass="l" headerText="Valor"
                            sortBy="#{produto.valor}">
                            <p:outputLabel value="R$#{produto.valor}" />
                        </p:column>
                        <p:column styleClass="l" headerText="Produtor"
                            sortBy="#{produto.produtor.nome}">
                            <p:outputLabel value="#{produto.produtor.nome}" />
                        </p:column>
                        <p:column styleClass="l" headerText="Entrada"
                            sortBy="#{produto.entrada}">
                            <p:outputLabel value="#{produto.entrada}">
                                <f:convertDateTime pattern="dd/MM/yyyy" />
                            </p:outputLabel>
                        </p:column>
                        <f:facet name="footer">
                            <p:commandButton process="table" icon="ui-icon-circle-check"
                        value="Selecionar" oncomplete="PF('selecionar_produto_WV').hide();" />
                        </f:facet>
                    </p:dataTable>

            </p:dialog>
</h:form>
        </h:body>
 </html>

调用包含该表的对话框的对话框应如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.org/ui">

    <h:head>
    </h:head>
    <h:body>
   <h:form id="iu01_13_01_form">
        <p:dialog widgetVar="iu01_13_01" modal="true" showEffect="clip">
            <p:ajax event="close" update="iu01_13_form"
            listener="#{iu01_13MBean.limpar}" />



                    <p:panelGrid columns="2">

                        <p:outputLabel value="Nome:" />
                        <p:inputText id="Nome" value="#{iu01_13MBean.venda.nome}" />

                        <p:outputLabel value="Data de venda:" />
                        <p:calendar id="Registro" value="#{iu01_13MBean.venda.data}" />

                        <p:outputLabel value="Valor:" />
                        <p:inputText id="Valor" value="#{iu01_13MBean.venda.valor}" />

                        <p:outputLabel value="Detalhes:" />
                        <p:inputText id="Detalhes" value="#{iu01_13MBean.venda.detalhes}" />

                        <p:outputLabel value="Produto:" />
                        <p:panelGrid columns="2">
                            <p:commandButton actionListener="#{iu01_08MBean.updateList}"
                                value="Selecionar produto" onclick="PF('selecionar_produto_WV').show();" />
                            <p:inputText id="Produto" value="#{iu01_08MBean.produto.nome}" />
                        </p:panelGrid>

                        <p:commandButton value="FINALIZAR" actionListener="#{iu01_13MBean.salvar}"
                    update="iu01_13_01_form, iu01_13_form"
                            onclick="PF('iu01_13_01').close();" />
                        <p:outputLabel />
                    </p:panelGrid>
        </p:dialog>

        <ui:include src="selecionar_produto.xhtml" />
 </h:form>
    </h:body>
 </html>