PrimeFaces + DataTable(编辑行)+ JAVA + MYSQL

时间:2014-03-09 15:35:29

标签: java mysql primefaces datatable edit

我想编辑数据表行。我的代码在这里:

我的jfs页面(Teszt.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: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>
    <p:fieldset legend="Teszt:">  
        <p:dataTable id="dataTable" value="#{TesztBean.values}" var="t"  paginator="true" rows="10" editable="true" editMode="cell">
        <p:ajax event="rowEdit" listener="#{TesztBean.update}"/>           

            <p:column filterBy="#{t.id}" sortBy="#{t.id}">
                <f:facet name="header">ID:</f:facet>                                                
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{t.id}"/>
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{t.id}"/>
                    </f:facet>
                </p:cellEditor>
            </p:column>

            <p:column filterBy="#{t.name}" sortBy="#{t.name}">
                <f:facet name="header">Name:</f:facet>                                                
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{t.name}"/>
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{t.name}"/>
                    </f:facet>
                </p:cellEditor>
            </p:column>


            <p:column filterBy="#{t.age}" sortBy="#{t.age}">
                <f:facet name="header">Age:</f:facet>                                                
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{t.age}"/>
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{t.age}"/>
                    </f:facet>
                </p:cellEditor>
            </p:column>

            <p:column><f:facet name="header">UPDATE</f:facet>                
                <p:commandButton value="Update" action="#{Teszt.updateOsszesito(t)}">                     
                   <f:ajax render="@all" execute="@form" /> 
                </p:commandButton>    
            </p:column>                               

            <p:column headerText="Edit">
                <p:rowEditor/>
            </p:column>

        </p:dataTable>
     </p:fieldset> 
    </h:form>
</html>

Teszt.java:

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 java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;


@ManagedBean
@SessionScoped

public class Teszt implements Serializable {


    public List<TesztSetGet> selectTable(){

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

        String stm = "select * from  teszt";

        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));             

            records.add(objectMeghiv);                        
         }

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

      } catch (SQLException e) {
         e.printStackTrace();         
     } catch (Exception e) {
         e.printStackTrace();         
     }
      return records;


    }



   public void updateOsszesito(TesztSetGet nth){

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

         String sql = "update teszt set name=?, age=? where id=?";                                 


         try{

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

            pst.setString(1, nth.getName());
            pst.setInt(2, nth.getAge());
            pst.setInt(3, nth.getId());                        

            System.out.println(nth.getId()+"    " + nth.getName() + "   " + nth.getAge() );

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

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

     }




   public Connection getDBConnection() {

        Connection dbConnection = null;

        String URL = "jdbc:mysql://IP:3306/osszesito";
        String USER = "osszesito";        
        String PASSWORD = "Password";
        String DRIVER = "com.mysql.jdbc.Driver";

        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; 
    }
}

TesztBean.java 更新

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;

public class TesztBean {

    String URL = "jdbc:mysql://IP:3306/osszesito";
    String USER = "osszesito";        
    String PASSWORD = "Password";
    String DRIVER = "com.mysql.jdbc.Driver";


    private List<TesztSetGet> values;

    @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";

        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));             

            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();        
    System.out.println(edittedObject.getName() + "--------------------------" +edittedObject.getAge());


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

     String sql = "update teszt set name=?, age=? where id=?";                                 


     try{

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

        pst.setString(1, edittedObject.getName());
        pst.setInt(2, edittedObject.getAge());
        pst.setInt(3, edittedObject.getId());                        

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

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

}

}

有TesztSetGet(设置和获取方法):

public class TesztSetGet {

    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

当我修改单元格并单击更新按钮时,单元格将返回原始状态:(

如何修改和更新行?

非常感谢,

1 个答案:

答案 0 :(得分:1)

您可以使用Primefaces for UI。 您必须将editable属性添加到datatable,然后添加包含rowEditor标记的列:

            <p:column headerText="edit">
                <p:rowEditor/>
            </p:column>

可编辑列必须改变如下:

              <p:column headerText="your column" >
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{t.name}"/>
                    </f:facet>
                    <f:facet name="input">
                        <h:inputText value="#{t.name}"/>
                    </f:facet>
                </p:cellEditor>
             </p:column>

更新: 添加ajax标记t datatable并为侦听器属性分配更新方法:

public class TesztBean  {

public void update(RowEditEvent event) {
        TesztSetGet edittedObject = (TesztSetGet) event.getObject();
        // update values field
    }
}