edit data in dataTable
croco Feb 18, 2009 10:24 AMHello. 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; } }