简体   繁体   English

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

[英]PrimeFaces + DataTable(edit row) + JAVA + MYSQL

I would like to edit datatable row. 我想编辑数据表行。 My code here: 我的代码在这里:

There is my jfs page (Teszt.xhtml) UPDATED : 我的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: 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 UPDATED : 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();
     }

}

}

There is TesztSetGet (set and get methods): 有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;
    }

}

When I modify the cells and i click update button, then the cells return to original state:( 当我修改单元格并单击“更新”按钮时,单元格将返回原始状态:(

How can i modify and update the rows? 如何修改和更新行?

thank you very much, 非常感谢你,

You can use the Primefaces for UI. 您可以使用Primefaces for UI。 You must add the editable attribute to datatable and so add a column that include rowEditor tag: 您必须将editable属性添加到数据表,然后添加包含rowEditor标记的列:

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

And editable column must change like this: 可编辑的列必须像这样更改:

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

update : add a ajax tag t datatable and assign a update method to listener attribute : 更新 :添加一个ajax标签t数据表,并为监听器属性分配一个更新方法:

public class TesztBean  {

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM