Java 数据表显示对话框

Java 数据表显示对话框,java,primefaces,datatable,dialog,Java,Primefaces,Datatable,Dialog,我有一个问题: 这是我的TesztBean.java: import java.io.Serializable; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.ut

我有一个问题:

这是我的TesztBean.java:

import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import org.primefaces.event.RowEditEvent;
import org.primefaces.model.LazyDataModel;


@ManagedBean
@SessionScoped

public class TesztBean implements Serializable{

    String URL = "jdbc:mysql://localhost:3306/osszesito?useUnicode=yes&characterEncoding=UTF-8";
    String USER = "USER";        
    String PASSWORD = "PASSWD";
    String DRIVER = "com.mysql.jdbc.Driver";

    private List<TesztSetGet> filteredOsszesito;
    private List<TesztSetGet> values;
    private TesztSetGet select;



    public TesztSetGet getSelect() {
        return select;
    }

    public void setSelect(TesztSetGet select) {
        this.select = select;
    }




    @PostConstruct
    public void init() {
        try {
            values = selectTesztTable();
        } catch (SQLException e) {

             e.printStackTrace();    
        }
    }


    public Connection getDBConnection() {

        Connection dbConnection = null;

        try {

            Class.forName(DRIVER);
            dbConnection= DriverManager.getConnection(URL, USER, PASSWORD);
            System.out.println("Connection completed.");

        } catch (SQLException e) { 

            System.out.println(e.getMessage()); 

        }catch(ClassNotFoundException cnfe){

           cnfe.printStackTrace();
           System.out.println(cnfe.getMessage());
           System.exit(-1);

       }

        return dbConnection; 
    }



    public List<TesztSetGet> selectTesztTable() throws SQLException{

        ResultSet rs = null;
        PreparedStatement pst = null;
        Connection con = getDBConnection();

        String stm = "select * from teszt order by age";

        List<TesztSetGet> records = new ArrayList<TesztSetGet>();


        try {

            pst = con.prepareStatement(stm);
            pst.execute();
            rs = pst.getResultSet();

         while(rs.next()){

            TesztSetGet objectMeghiv = new TesztSetGet();

            objectMeghiv.setId(rs.getInt(1));            
            objectMeghiv.setName(rs.getString(2)); 
            objectMeghiv.setAge(rs.getInt(3)); 
            objectMeghiv.setKapcsolatfelvetel_megtortent(rs.getString(4));            
            objectMeghiv.setLevelkuldesenek_datuma(rs.getString(5));
            objectMeghiv.setKepzes_kezdete(rs.getString(6));
            objectMeghiv.setKepzes_vege(rs.getString(7));
            objectMeghiv.setMagyarazat(rs.getString(8));                   
            records.add(objectMeghiv);

         }

         return records;


        }catch (SQLException e) {
            e.printStackTrace();         
        }catch (Exception e) {
            e.printStackTrace();         
        }finally{

            rs.close();
            pst.close();            
            con.close();

     }

      return records;

    }


    public List<TesztSetGet> getValues() { 

        return values; 

    }



    public void update(RowEditEvent event) {

        TesztSetGet edittedObject = (TesztSetGet) event.getObject();        

        Connection connection = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        String sql = "update teszt set kapcsolatfelvetel_megtortent=?, levelkuldes_datuma=?, kepzes_kezdete=?, kepzes_vege=?, megjegyzes=?  where id=?";

        try{

            connection = getDBConnection();                                                                       
            pst = connection.prepareStatement(sql);



            pst.setString(1, edittedObject.getKapcsolatfelvetel_megtortent());
            pst.setString(2, edittedObject.getLevelkuldesenek_datuma());
            pst.setString(3, edittedObject.getKepzes_kezdete());
            pst.setString(4, edittedObject.getKepzes_vege());
            pst.setString(5, edittedObject.getMagyarazat());
            pst.setInt(6, edittedObject.getId());

            pst.executeUpdate();
            pst.close();
            connection.close();

        }catch(SQLException se){
            se.printStackTrace();
            se.getMessage();
         }catch(Exception e){
             e.printStackTrace();
             e.getMessage();
         }    


    }

    public List<TesztSetGet> getFilteredOsszesito() {
        return filteredOsszesito;
    }

    public void setFilteredOsszesito(List<TesztSetGet> filteredOsszesito) {
        this.filteredOsszesito = filteredOsszesito;
    }

}
这是我的jsf页面:

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

    <h:head>    
            <title>Teszt</title>        
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>                        
            <link rel="stylesheet" type="text/css" href="style.css"/>            
    </h:head>

    <ui:debug />
    <h:form id="form">
        <p:fieldset legend="Teszt:">
            <p:dataTable id="dataTableTeszt" value="#{TesztBean.values}" var="c" paginator="true" rows="25" editable="true" filteredValue="#{TesztBeanBean.filteredOsszesito}" scrollable="true" scrollWidth="1500" scrollHeight="550"
                        paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                        paginatorPosition="bottom" rowsPerPageTemplate="5,10,15,20,30,40,50">


                        <p:column style="width: 60px; text-align: center" headerText="Show">
                            <p:commandButton id="addCategoryButton" value="Show" onclick="categoryDialog.show();" action="#{TesztBean.values}" update=":form:grid"/>
                        </p:column>

                        <p:column style="width: 130px; text-align: center" filterBy="#{c.id}" filterMatchMode="contains">
                            <f:facet name="header">ID:</f:facet>                                                
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{c.id}" style="width: 130px; text-align: center"/>
                                </f:facet>
                                <f:facet name="input">
                                    <p:inputText value="#{c.id}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>


                        <p:column style="width: 130px; text-align: center" filterBy="#{c.name}" filterMatchMode="contains">
                            <f:facet name="header">Name:</f:facet>                                                
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{c.name}" style="width: 130px; text-align: center"/>
                                </f:facet>
                                <f:facet name="input">
                                    <p:inputText value="#{c.name}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>

                        <p:column style="width: 130px; text-align: center" filterBy="#{c.age}" filterMatchMode="contains" >
                            <f:facet name="header">Age:</f:facet>                                                
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{c.age}" style="width: 130px; text-align: center"/>
                                </f:facet>
                                <f:facet name="input">
                                    <p:inputText value="#{c.age}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>    


                        <p:column style="width: 230px; text-align: center" filterBy="#{c.kapcsolatfelvetel_megtortent}" filterMatchMode="contains" >
                            <f:facet name="header">Kapcsolatfelvétel megtörtént:</f:facet>                                                
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{c.kapcsolatfelvetel_megtortent}" style="width: 230px; text-align: center"/>
                                </f:facet>
                                <f:facet name="input">
                                    <p:inputText value="#{c.kapcsolatfelvetel_megtortent}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>               

                        <p:column style="width: 230px; text-align: center" filterBy="#{c.levelkuldesenek_datuma}" filterMatchMode="contains" >
                            <f:facet name="header">Levélküldés dátuma:</f:facet>                                                
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{c.levelkuldesenek_datuma}" style="width: 230px; text-align: center"/>
                                </f:facet>
                                <f:facet name="input">
                                    <p:inputText value="#{c.levelkuldesenek_datuma}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>

                        <p:column style="width: 230px; text-align: center" filterBy="#{c.kepzes_kezdete}" filterMatchMode="contains" >
                            <f:facet name="header">Képzés kezdete:</f:facet>                                                
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{c.kepzes_kezdete}" style="width: 230px; text-align: center"/>
                                </f:facet>
                                <f:facet name="input">
                                    <p:inputText value="#{c.kepzes_kezdete}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>

                        <p:column style="width: 230px; text-align: center" filterBy="#{c.kepzes_vege}" filterMatchMode="contains" >
                            <f:facet name="header">Képzés vege:</f:facet>                                                
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{c.kepzes_vege}" style="width: 230px; text-align: center"/>
                                </f:facet>
                                <f:facet name="input">
                                    <p:inputText value="#{c.kepzes_vege}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>

                        <p:column style="width: 1000px; text-align: center" filterBy="#{c.magyarazat}" filterMatchMode="contains">
                            <f:facet name="header">Megjegyzés:</f:facet>                                                
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{c.magyarazat}" style="width: 1000px; text-align: center"/>
                                </f:facet>
                                <f:facet name="input">
                                    <p:inputText value="#{c.magyarazat}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>   

        </p:dataTable>  
        </p:fieldset>

        <p:dialog id="categoryDialog" header="Category Detail" widgetVar="categoryDialog" closeOnEscape="true" resizable="false" style="width:1000px; height: 500px;" showEffect="explode" hideEffect="bounce">

            <h:panelGrid id="grid" columns="2">                            
                    <h:outputText value="ID:"/>
                    <h:outputText value="#{TesztBean.select.id}"/>
                    <h:outputText value="Age:"/>
                    <h:outputText value="#{TesztBean.select.age}"/>
                    <h:outputText value="Kapcsolatfelvetel megtortent:"/>
                    <h:outputText value="#{TesztBean.select.kapcsolatfelvetel_megtortent}"/>

            </h:panelGrid> 



        </p:dialog>


    </h:form> 

</html>
修改:

JSf页面:

<p:column style="width: 60px; text-align: center" headerText="Edit">
                            <p:commandButton id="addCategoryButton" value="Show" oncomplete="categoryDialog.show();" update=":form:grid :form:categoryDialog" actionListener="#{TesztBean.select(c)}"/>
                        </p:column>
我发现在服务器中存在例外情况:

调用操作时收到“javax.el.MethodNotFoundException” 侦听器“#{TesztBean.select(c)}”用于组件“addCategoryButton”|#] [#| 2014-05-15T16:24:30.443+0200严重| oracle-glassfish3.1.2 | javax.faces.event | | u ThreadID=75;_ThreadName=Thread-2;| javax.el.MethodNotFoundException: 找不到方法选择

[#| 2014-05-15T16:24:30.444+0200 |严重| oracle-glassfish3.1.2 | javax.enterprise.resource.webcontainer.jsf.context | | U ThreadID=75;| U ThreadName=Thread-2;| JSF1073: 处理过程中捕获的javax.faces.event.AbortProcessingException 调用应用程序5:UIComponent ClientId=form:dataTableTeszt, 消息=方法选择未找到|#]

[#| 2014-05-15T16:24:30.444+0200 |严重| oracle-glassfish3.1.2 | javax.enterprise.resource.webcontainer.jsf.context | U ThreadID=75;| U ThreadName=Thread-2;|方法 选择“未找到”


您有两个问题,首先,您将所选项目发送到了您的bean的哪里?他们有很多方法可以做到这一点

您可以通过将这两个属性添加到数据表中来使用:

selection="#{TesztBean.values}" selectionMode="single"
或者修改commandbutton并添加actionListener,如下所示:

actionListener="#{TesztBean.selectForDialog(c)}" />
在您的bean中添加:

public void selectForDialog(TesztSetGet value){
    this.select = value;
}
你的第二个问题是你没有更新你的对话框,他显示得很好,但是是空的,因为他没有正确的刷新值

<p:commandButton id="addCategoryButton" value="Show" oncomplete="categoryDialog.show();" actionListener="#{TesztBean.selectForDialog(c)}" update=":form:grid :form:categoryDialog"/>


在设置数据之前,使用
oncomplete
而不是
onclick
或打开对话框。

我对代码进行了修改,但它不起作用,在调用组件“addCategoryButton”的操作侦听器“#{TesztBean.select(c)}”时,会出现错误/异常:“javax.el.MethodNotFoundException”javax.faces.event.AbortProcessingException在处理INVOKE_应用程序5时捕获:UIComponent ClientId=form:dataTableTeszt,Message=Method select not found |#]Method select not found亲爱的朋友,它可以工作:)谢谢,谢谢,谢谢
actionListener="#{TesztBean.selectForDialog(c)}" />
public void selectForDialog(TesztSetGet value){
    this.select = value;
}
<p:commandButton id="addCategoryButton" value="Show" oncomplete="categoryDialog.show();" actionListener="#{TesztBean.selectForDialog(c)}" update=":form:grid :form:categoryDialog"/>