Bonjour,
j'ai un petit problème concernant dataTable..
Lorsque je clique sur le bouton supprimer dans un ligne du DataTable l'exception suivante s'affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
javax.servlet.ServletException: #{user.doDelete}: java.lang.NullPointerException
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
 
cause mère
 
javax.faces.FacesException: #{user.doDelete}: java.lang.NullPointerException
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
	javax.faces.component.UICommand.broadcast(UICommand.java:387)
	org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
	org.ajax4jsf.component.UIDataAdaptor.broadcast(UIDataAdaptor.java:1364)
	org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:318)
	org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:293)
	org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:250)
	org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:463)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
 
cause mère
 
javax.faces.el.EvaluationException: java.lang.NullPointerException
	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	javax.faces.component.UICommand.broadcast(UICommand.java:387)
	org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
	org.ajax4jsf.component.UIDataAdaptor.broadcast(UIDataAdaptor.java:1364)
	org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:318)
	org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:293)
	org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:250)
	org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:463)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
 
cause mère
 
java.lang.NullPointerException
	javax.gyles.models.UserModel.doDelete(UserModel.java:53)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.apache.el.parser.AstValue.invoke(AstValue.java:172)
	org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	javax.faces.component.UICommand.broadcast(UICommand.java:387)
	org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
	org.ajax4jsf.component.UIDataAdaptor.broadcast(UIDataAdaptor.java:1364)
	org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:318)
	org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:293)
	org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:250)
	org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:463)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
 
note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/6.0.20.
voici le source de mon code :
UserModel.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/**
 * @author Gyles
**/
 
package javax.gyles.models;
 
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.gyles.models.ext.ListUser;
import javax.faces.context.FacesContext;
import javax.faces.application.FacesMessage;
 
public class UserModel extends Object
{
	private String nom;
	private String prenom;
	private ListUser users;
	private DataModel dataModel;
 
	public UserModel()
	{
		if (users == null) users = new ListUser();
 
		if (dataModel == null)
		{
			dataModel = new ListDataModel();
			dataModel.setWrappedData(users.getList());
		}
	}
 
	public UserModel(String nom, String prenom)
	{
		this.nom = nom;
		this.prenom = prenom;
	}
 
	public String doAdd()
	{		
		if (users.isAlreadyRegistered(new UserModel(nom, prenom)))
		{
			FacesContext.getCurrentInstance().addMessage("ERROR", new FacesMessage("Cet utilisateur est déjà enregistré."));
			return null;
		}else
		{
			users.add(new UserModel(nom, prenom));
			return null;
		}
	}
 
	public String doDelete()
	{
		users.remove((UserModel)dataModel.getRowData());
		return null;
	}
 
	public String doReset()
	{
		nom = "";
		prenom = "";
 
		return null;
	}
 
	public String doShow()
	{
		return "SUCCESS";
	}
 
	public void setNom(String nom)
	{
		this.nom = nom;
	}
 
	public void setPrenom(String prenom)
	{
		this.prenom = prenom;
	}
 
	public void setDataModel(DataModel dataModel)
	{
		this.dataModel = dataModel;
	}
 
	public void setUsers(ListUser users)
	{
		this.users = users;
	}
 
	public String getNom()
	{
		return nom;
	}
 
	public String getPrenom()
	{
		return prenom;
	}
 
	public DataModel getDataModel()
	{
		return dataModel;
	}
 
	public ListUser getUsers()
	{
		return users;
	}
}
ListUser.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
 * @author Gyles
**/
 
package javax.gyles.models.ext;
 
import java.util.List;
import java.util.ArrayList;
import javax.gyles.models.UserModel;
 
public class ListUser extends Object
{
	private List<UserModel> list;
 
	public ListUser()
	{
		if (list == null) list = new ArrayList<UserModel>();
	}
 
	public void add(UserModel user)
	{
		list.add(user);
	}
 
	public void remove(UserModel user)
	{
		list.remove(user);
	}
 
	public void clear()
	{
		list.clear();
	}
 
	public boolean isAlreadyRegistered(UserModel user)
	{
		boolean exists = false;
 
		for (int i = 0; i < list.size(); i++)
		{
			if (list.get(i).getNom().equals(user.getNom()) && list.get(i).getPrenom().equals(user.getPrenom()))
			{
				exists = true;
				break;
			}
		}
 
		return exists;
	}
 
	public void setList(List<UserModel> list)
	{
		this.list = list;
	}
 
	public List<UserModel> getList()
	{
		return list;
	}
}
addForm.jsp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@taglib uri="http://richfaces.org/rich" prefix="rich" %>
<%@taglib uri="http://richfaces.org/a4j" prefix="ajax" %>
 
<f:view>
	<html>
		<head>
			<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
			<title>Ajout d'un nouveau utilisateur</title>
		</head>
		<body>
			<br/><center><h:outputText value="NOUVEL UTILISATEUR" style="font-family:verdana; font-weight:bold; font-size:46px;" /><br/><br/></center>
			<center><h:outputText id="ERROR" value="" /><rich:message for="ERROR" style="font-family:tahoma; font-weight:bold; font-size:11px; color:red;" /><br/><br/></center>
			<center><rich:panel header="Ajout d'un nouveau utilisateur" style="width:380px; height:150px;">
				<ajax:form>
					<h:panelGrid columns="3" width="380" cellspacing="10">
						<h:panelGroup><h:outputText value="Nom :" /></h:panelGroup>
						<h:panelGroup><h:inputText id="NOM" value="#{user.nom}" size="25" required="true" requiredMessage="* Champ Obligatoire" /></h:panelGroup>
						<h:panelGroup><rich:message for="NOM" style="color:red;" /></h:panelGroup>
						<h:panelGroup><h:outputText value="Prénom :" /></h:panelGroup>
						<h:panelGroup><h:inputText id="PRENOM" value="#{user.prenom}" size="25" required="true" requiredMessage="* Champ Obligatoire" /></h:panelGroup>
						<h:panelGroup><rich:message for="PRENOM" style="color:red;" /></h:panelGroup>
						<h:panelGroup><ajax:commandButton value="Enregistrer" action="#{user.doAdd}" reRender="TABLE" /></h:panelGroup>
						<h:panelGroup><ajax:commandButton value="Rétablir" action="#{user.doReset}" reRender="NOM, PRENOM" /><rich:spacer width="50px" />
									  <ajax:commandButton value="Show" action="#{user.doShow}" immediate="true" /></h:panelGroup>
						<h:panelGroup></h:panelGroup>
					</h:panelGrid><br/><br/><br/><br/><br/>
 
					<center><rich:dataTable id="TABLE" value="#{user.dataModel}" var="user" width="300px">
						<rich:column><f:facet name="header"><h:outputText value="NOM" /></f:facet><h:outputText value="#{user.nom}" /></rich:column>
						<rich:column><f:facet name="header"><h:outputText value="PRENOM" /></f:facet><h:outputText value="#{user.prenom}" /></rich:column>
						<rich:column><f:facet name="header"><h:outputText value="DELETE" /></f:facet><center><ajax:commandButton value="Supprimer" action="#{user.doDelete}" reRender="TABLE" /></center></rich:column>
					</rich:dataTable></center>
				</ajax:form>
			</rich:panel></center>
		</body>
	</html>
</f:view>
d'avance Merci..