0 Replies Latest reply on Feb 18, 2009 10:24 AM by Matija Vizintin

    edit data in dataTable

    Matija Vizintin Newbie

      Hello. I'm new at JSF and this thing and I have a problem. I have a dataTable which in filled with data (userid, first name, last name and email) read from the database and on the userid is a commandLink that opens (with ajax) inputFiels to edit this user (first last name and email). Now the problem I have is that i don't know how to send to the bean this userid, so the bean would know in which row of the database fit the new data.

      Here is the code:

      jsp file:

      <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
      <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
      <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Database handle</title>
      </head>
      <body>
      <f:view>
      <center>
      <table border="5">
      <tr><th>Database Handle</th></tr>
      </table>
      <p />
      
      <h:dataTable value="#{databaseBean.linkedList}" var="linkedList" border="3">
      
      <h:column>
      <f:facet name="header">
      <h:outputText value="UserID" />
      </f:facet>
      <h:form>
      <a4j:commandLink action="#{databaseBean.enableEdit}" reRender="enableEdit" >
      <h:outputText value="#{linkedList.userID}" />
      </a4j:commandLink>
      </h:form>
      </h:column>
      
      <h:column>
      <f:facet name="header">
      <h:outputText value="First Name" />
      </f:facet>
      <h:outputText value="#{linkedList.firstName}" />
      </h:column>
      
      <h:column>
      <f:facet name="header">
      <h:outputText value="Last Name" />
      </f:facet>
      <h:outputText value="#{linkedList.lastName}" />
      </h:column>
      
      <h:column>
      <f:facet name="header">
      <h:outputText value="Email" />
      </f:facet>
      <h:outputText value="#{linkedList.email}" />
      </h:column>
      
      </h:dataTable>
      <p />
      <h:form>
      <h:panelGrid id="enableEdit" columns="2" >
      <h:outputText value="Insert new first name: " rendered="#{not empty databaseBean.editData}" />
      <h:inputText value="#{databaseBean.newFirstName}" rendered="#{not empty databaseBean.editData}" />
      <h:outputText value="Insert new last name: " rendered="#{not empty databaseBean.editData}" />
      <h:inputText value="#{databaseBean.newLastName}" rendered="#{not empty databaseBean.editData}" />
      <h:outputText value="Insert new email: " rendered="#{not empty databaseBean.editData}" />
      <h:inputText value="#{databaseBean.newEmail}" rendered="#{not empty databaseBean.editData}" />
      <a4j:commandButton action="#{databaseBean.fireAjax}" value="Send new data" rendered="#{not empty databaseBean.editData}" />
      </h:panelGrid>
      </h:form>
      
      </center>
      </f:view>
      </body>
      </html>


      Bean:
      package ...;
      import java.sql.*;
      import java.util.LinkedList;
      
      public class DatabaseBean {
       private LinkedList<User> linkedList;
       private String editData;
       private String newFirstName;
       private String newLastName;
       private String newEmail;
      
       public DatabaseBean() {
       try {
       Class.forName("com.mysql.jdbc.Driver").newInstance();
       String host = "...";
       String database = "...";
       String username = "...";
       String password = "...";
       String prefix = "jdbc:mysql://";
       String URL = prefix + host + "/" + database;
       Connection connection = DriverManager.getConnection(URL, username, password);
       Statement statement = connection.createStatement();
       String query = "SELECT * FROM Podatki";
       ResultSet resultSet = statement.executeQuery(query);
       handleData(resultSet);
       connection.close();
       editData = "";
       newFirstName = "";
       newLastName = "";
       newEmail = "";
       }
       catch (ClassNotFoundException cnfe) {
       System.out.println("Error loading driver: " + cnfe);
       } catch (InstantiationException ie) {
       System.out.println("Instantiation error: " + ie);
       } catch (IllegalAccessException iae) {
       System.out.println("Illegal access: " + iae);
       } catch (SQLException sqle) {
       System.out.println("SQL exception: " + sqle);
       }
       }
      
       private void handleData(ResultSet rs) {
       try {
       linkedList = new LinkedList<User>();
       while(rs.next()) {
       linkedList.add(new User(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4)));
       }
       }
       catch(SQLException sqle) {
       System.out.println("Error in sql result fied: " + sqle);
       }
       }
      
       public LinkedList<User> getLinkedList() {
       return this.linkedList;
       }
      
       public String getEditData() {
       return editData;
       }
      
       public void setEditData(String editData) {
       this.editData = editData;
       }
      
       /*
       * Ajax
       */
       public String enableEdit() {
       this.editData = "enableEdit";
       this.newFirstName = "...insert new name...";
       this.newLastName = "...insert new last name...";
       this.newEmail = "...insert new email...";
       return null;
       }
      
       public String getNewFirstName() {
       return newFirstName;
       }
      
       public void setNewFirstName(String newFirstName) {
       this.newFirstName = newFirstName;
       }
      
       public String getNewLastName() {
       return newLastName;
       }
      
       public void setNewLastName(String newLastName) {
       this.newLastName = newLastName;
       }
      
       public String getNewEmail() {
       return newEmail;
       }
      
       public void setNewEmail(String newEmail) {
       this.newEmail = newEmail;
       }
      
       /*
       * Ajax
       */
       public String fireAjax() {
       // here is supposed to be the code to set the new values in the db
       System.out.println("hello!");
       return null;
       }
      
      }