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