可编辑对话框Primefaces

时间:2014-04-03 16:23:16

标签: jsf jsf-2 primefaces

我正在使用primefaces,我正在尝试为我的数据表创建一个可编辑的对话框。当我进入编辑按钮(数据表的页脚)时,会出现对话框,但不显示所选行的值。怎么了?

我的xhtml文件:

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core">

    <body>

        <ui:composition template="./../WEB-INF/template_sistema.xhtml">

            <ui:define name="content">
                <h:form prependId="false">  

                    <p:dataTable id="dataTable" var="resultadoBanescap" value="#{lstResultados.resultadoBanescap}"  
                                 paginator="true" rows="10"  
                                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                                 rowsPerPageTemplate="5,10,15,20"
                                 emptyMessage="Não foram encontradas informações"
                                 selection="#{resultadoBanescap.selecionado}" selectionMode="single">  

                        <p:column id="colunaNumero" 
                                  filterBy="#{resultadoBanescap.rbcnr}" 
                                  sortBy="#{resultadoBanescap.rbcnr}" 
                                  filterMatchMode="contains">  
                            <f:facet name="header">  
                                <h:outputText value="Número" />  
                            </f:facet>  
                            <h:outputText value="#{resultadoBanescap.rbcnr}" />  
                        </p:column>  

                        <p:column id="colunaDia" 
                                  filterBy="#{resultadoBanescap.tbResultadoBanescapPK.rbcdd}" 
                                  sortBy="#{resultadoBanescap.tbResultadoBanescapPK.rbcdd}" 
                                  filterMatchMode="contains">  
                            <f:facet name="header">  
                                <h:outputText value="Dia" />  
                            </f:facet>  
                            <h:outputText value="#{resultadoBanescap.tbResultadoBanescapPK.rbcdd}" />  
                        </p:column>  

                        <p:column id="colunaMes" 
                                  filterBy="#{resultadoBanescap.tbResultadoBanescapPK.rbcmm}" 
                                  sortBy="#{resultadoBanescap.tbResultadoBanescapPK.rbcmm}" 
                                  filterMatchMode="contains">  
                            <f:facet name="header">  
                                <h:outputText value="Mês" />  
                            </f:facet>  
                            <h:outputText value="#{resultadoBanescap.tbResultadoBanescapPK.rbcmm}" />  
                        </p:column>  

                        <p:column id="colunaAno" 
                                  filterBy="#{resultadoBanescap.tbResultadoBanescapPK.rbcaa}" 
                                  sortBy="#{resultadoBanescap.tbResultadoBanescapPK.rbcaa}" 
                                  filterMatchMode="contains">  
                            <f:facet name="header">  
                                <h:outputText value="Ano" />  
                            </f:facet>  
                            <h:outputText value="#{resultadoBanescap.tbResultadoBanescapPK.rbcaa}" />  
                        </p:column> 

                        <f:facet name="footer">  
                            <p:commandButton id="viewButton" 
                                             value="View"  
                                             update=":form:dataTable" 
                                             oncomplete="detalheDialog.show()"
                                             onclick="detalheDialog.show()"/>  
                        </f:facet> 

                    </p:dataTable>  

                    <p:dialog id="dialog" header="Detalhes" widgetVar="detalheDialog" resizable="false"  
                              width="300" showEffect="clip" hideEffect="clip" modal="true" appendToBody="true">  

                        <h:form id="frmUpdate">
                            <h:panelGrid id="display" columns="2" cellpadding="4">  
                                <h:outputText value="Número:" />  
                                <h:inputText value="#{lstResultados.selecionado.rbcnr}" />  

                                <h:outputText value="Dia:" />  
                                <h:inputText value="#{lstResultados.selecionado.tbResultadoBanescapPK.rbcdd}" />  

                                <h:outputText value="Mês:" />  
                                <h:inputText value="#{lstResultados.selecionado.tbResultadoBanescapPK.rbcmm}" />  

                                <h:outputText value="Ano:" />  
                                <h:inputText value="#{lstResultados.selecionado.tbResultadoBanescapPK.rbcaa}" />  
                            </h:panelGrid>  
                        </h:form>
                    </p:dialog>  

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

        </ui:composition>

    </body>
</html>

我的bean文件:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.banestes.ui.bean;

import br.com.banestes.domain.TbResultadoBanescap;
import br.com.banestes.domain.controller.TbResultadoBanescapJpaController;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author 030072182
 */
@RequestScoped
@ManagedBean(name = "lstResultados")
public class ListResultados {

    private List<TbResultadoBanescap> resultadoBanescap;
    private TbResultadoBanescap selecionado;

    public ListResultados() {
        TbResultadoBanescapJpaController ctrl = new TbResultadoBanescapJpaController();
        resultadoBanescap = ctrl.findTbResultadoBanescapEntities();
    }

    public List<TbResultadoBanescap> getResultadoBanescap()
    {
        return resultadoBanescap;
    }

    public TbResultadoBanescap getSelecionado() {
        return selecionado;
    }

    public void setSelecionado(TbResultadoBanescap selecionado) {
        this.selecionado = selecionado;
    }


}

另一个问题是:是否可以在另一个xhtml中创建一个表单并在对话框中使用他?

1 个答案:

答案 0 :(得分:0)

一些事情:

  1. 对话框中未显示所选行,因为单击页脚中的按钮时不会更新对话框。您的更新应为update=":form:dataTable :dialog"
  2. 除非您对数据表上的数据执行某些操作(我在您的代码中没有看到它),否则您也应该从更新中删除:form:dataTable
  3. <p:dataTable>中,您将所选数据放入resultadoBanescap.selecionado。但是,在对话框中,您正在从lstResultados.selecionado读取数据。检查逻辑。
  4. 您应该将对话框从第一个表单中删除。
  5. 是的,可以在另一个xhtml文件中创建一个表单,然后使用<ui:include>将其添加到对话框中。