IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Suppression ligne DataTable


Sujet :

JSF Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut Suppression ligne DataTable
    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..

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Peut on voir la déclaration de ton user dans le faces config?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Peut on voir la déclaration de ton user dans le faces config?
    faces-config.xml
    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <faces-config
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
        version="1.2">
    	<managed-bean>
    		<managed-bean-name>user</managed-bean-name>
    		<managed-bean-class>javax.gyles.models.UserModel</managed-bean-class>
    		<managed-bean-scope>application</managed-bean-scope>
    	</managed-bean>
     
    <navigation-rule>
    <from-view-id>forms/addForm.jsp</from-view-id>
    <navigation-case>
    <from-outcome>SUCCESS</from-outcome>
    <to-view-id>forms/views/listView.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>
    </faces-config>

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Change un peu le nom de cette variable 'var=user' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rich:dataTable id="TABLE" value="#{user.dataModel}" var="user" width="300px">
    .
    C'est possible que JSF se melange les pinceaux.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Change un peu le nom de cette variable 'var=user' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rich:dataTable id="TABLE" value="#{user.dataModel}" var="user" width="300px">
    .
    C'est possible que JSF se melange les pinceaux.
    j'ai changé le nom de var mais le message d'erreur s'affiche toujours.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Par défaut
    Ajoute un breakPoint à la méthode doDelete et debug ton programme tu verras d'où vient le nullPointerException

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut Nouveau code & nouvelle exception
    Citation Envoyé par soffru Voir le message
    Ajoute un breakPoint à la méthode doDelete et debug ton programme tu verras d'où vient le nullPointerException
    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="#{userModel.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="#{userModel.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="#{userModel.doAdd}" reRender="TABLE" /></h:panelGroup>
    						<h:panelGroup><ajax:commandButton value="Rétablir" action="#{userModel.doReset}" reRender="NOM, PRENOM" /><rich:spacer width="50px" />
    									  <ajax:commandButton value="Show" action="#{userModel.doShow}" immediate="true" /></h:panelGroup>
    						<h:panelGroup></h:panelGroup>
    					</h:panelGrid><br/><br/><br/><br/><br/>
     
    					<center><rich:dataTable id="TABLE" value="#{userModel.dataModel}" var="userModel" width="300px">
    						<rich:column><f:facet name="header"><h:outputText value="NOM" /></f:facet><h:outputText value="#{userModel.nom}" /></rich:column>
    						<rich:column><f:facet name="header"><h:outputText value="PRENOM" /></f:facet><h:outputText value="#{userModel.prenom}" /></rich:column>
    						<rich:column><f:facet name="header"><h:outputText value="DELETE" /></f:facet><center><ajax:commandButton value="Supprimer" action="#{userModel.doDelete}" reRender="TABLE" /></center></rich:column>
    					</rich:dataTable></center>
    				</ajax:form>
    			</rich:panel></center>
    		</body>
    	</html>
    </f:view>

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    /**
     * @author Gyles
    **/
     
    package javax.gyles.models;
     
    import java.util.List;
    import java.util.ArrayList;
    import javax.faces.model.DataModel;
    import javax.faces.model.ListDataModel;
    import javax.faces.context.FacesContext;
    import javax.faces.application.FacesMessage;
     
    public class UserModel extends Object
    {
    	private String nom;
    	private String prenom;
    	private DataModel dataModel;
    	private List<UserModel> list = new ArrayList<UserModel>();
     
    	public UserModel()
    	{
    	}
     
    	public UserModel(String nom, String prenom)
    	{
    		this.nom = nom;
    		this.prenom = prenom;
    	}
     
    	public String doAdd()
    	{		
    		if (this.isAlreadyRegistered(new UserModel(nom, prenom)))
    		{
    			FacesContext.getCurrentInstance().addMessage("ERROR", new FacesMessage("Cet utilisateur est déjà enregistré."));
    			return null;
    		}else
    		{
    			list.add(new UserModel(nom, prenom));
    			return null;
    		}
    	}
     
    	public String doDelete()
    	{
    		UserModel u = (UserModel)this.getDataModel().getRowData();
    		System.out.println(u.getNom());
     
    		return null;
    	}
     
    	public String doReset()
    	{
    		nom = "";
    		prenom = "";
     
    		return null;
    	}
     
    	public String doShow()
    	{
    		return "SUCCESS";
    	}
     
    	private boolean isAlreadyRegistered(UserModel userModel)
    	{
    		boolean exists = false;
     
    		for (int i = 0; i < list.size(); i++)
    		{
    			if (list.get(i).getNom().equals(userModel.getNom()) && list.get(i).getPrenom().equals(userModel.getPrenom()))
    			{
    				exists = true;
    				break;
    			}
    		}
     
    		return exists;
    	}
     
    	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 setList(List<UserModel> list)
    	{
    		this.list = list;
    	}
     
    	public String getNom()
    	{
    		return nom;
    	}
     
    	public String getPrenom()
    	{
    		return prenom;
    	}
     
    	public DataModel getDataModel()
    	{
    		if (dataModel == null)
    		{
    			dataModel = new ListDataModel();
    			dataModel.setWrappedData(list);
    		}
     
    		return dataModel;
    	}
     
    	public List<UserModel> getList()
    	{
    		return list;
    	}
    }

    faces-config.xml
    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <faces-config
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
        version="1.2">
    	<managed-bean>
    		<managed-bean-name>userModel</managed-bean-name>
    		<managed-bean-class>javax.gyles.models.UserModel</managed-bean-class>
    		<managed-bean-scope>application</managed-bean-scope>
    	</managed-bean>
     
    <navigation-rule>
    <from-view-id>forms/addForm.jsp</from-view-id>
    <navigation-case>
    <from-outcome>SUCCESS</from-outcome>
    <to-view-id>forms/views/listView.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>
    </faces-config>

    web.xml
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <context-param>
            <param-name>org.richfaces.SKIN</param-name>
            <param-value>japanCherry</param-value>
        </context-param>
        <context-param>
            <param-name>org.richfaces.CONTROL_SKINNING</param-name>
            <param-value>enable</param-value>
        </context-param>
        <filter>
            <filter-name>richfaces</filter-name>
            <filter-class>org.ajax4jsf.Filter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>richfaces</filter-name>
            <servlet-name>Faces Servlet</servlet-name>
            <dispatcher>REQUEST</dispatcher>
            <dispatcher>FORWARD</dispatcher>
            <dispatcher>INCLUDE</dispatcher>
        </filter-mapping>
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.jsf</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

    EXCEPTION
    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
    exception
     
    javax.servlet.ServletException: #{userModel.doDelete}: javax.faces.model.NoRowAvailableException
    	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: #{userModel.doDelete}: javax.faces.model.NoRowAvailableException
    	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: javax.faces.model.NoRowAvailableException
    	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
     
    javax.faces.model.NoRowAvailableException
    	javax.faces.model.ListDataModel.getRowData(ListDataModel.java:150)
    	javax.gyles.models.UserModel.doDelete(UserModel.java:46)
    	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)

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Mais non t'as pas compris ce que j'ai dit .
    Il ne faut pas que l'identifiant de ta classe déclarée dans le faces config soit le même que l'identifiant de parcours de la boucle dans le datatable, c'est là où je parlais de melange de pinceaux.
    Tu peux garder ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <managed-bean>
    		<managed-bean-name>userModel</managed-bean-name>
    		<managed-bean-class>javax.gyles.models.UserModel</managed-bean-class>
    		<managed-bean-scope>application</managed-bean-scope>
    	</managed-bean>
    et dans ton fichier client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <center><rich:dataTable id="TABLE" value="#{userModel.dataModel}" var="currentUser" width="300px">
    						<rich:column><f:facet name="header"><h:outputText value="NOM" /></f:facet><h:outputText value="#{currentUser.nom}" /></rich:column>
    						<rich:column><f:facet name="header"><h:outputText value="PRENOM" /></f:facet><h:outputText value="#{currentUser.prenom}" /></rich:column>
    						<rich:column><f:facet name="header"><h:outputText value="DELETE" /></f:facet><center><ajax:commandButton value="Supprimer" action="#{userModel.doDelete}" reRender="TABLE" /></center></rich:column>
    					</rich:dataTable></center>
    , c'est sur la collection que tu fais ta suppression, architecturement parlant, et non sur l'utilisateur lui-même, ca a pas de sens.
    Apres si ca marche pas essaie de faire un peu du pas à pas.

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    ta liste emble une liste d'objets UserModel qui n'implémente pas l'interface DataModel.

    n'utilise pas cette méthode pour récupérer la ligne sélectionnée, tu as deux autres méthodes détaillées dans la

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Par défaut
    il te dit noRowAvailableException c'est à dire que la ligne que tu veux supprimer n'existe pas. Vérifie si le user que tu veux supprimer existe bien

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Mais non t'as pas compris ce que j'ai dit .
    Il ne faut pas que l'identifiant de ta classe déclarée dans le faces config soit le même que l'identifiant de parcours de la boucle dans le datatable, c'est là où je parlais de melange de pinceaux.
    Tu peux garder ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <managed-bean>
    		<managed-bean-name>userModel</managed-bean-name>
    		<managed-bean-class>javax.gyles.models.UserModel</managed-bean-class>
    		<managed-bean-scope>application</managed-bean-scope>
    	</managed-bean>
    et dans ton fichier client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <center><rich:dataTable id="TABLE" value="#{userModel.dataModel}" var="currentUser" width="300px">
    						<rich:column><f:facet name="header"><h:outputText value="NOM" /></f:facet><h:outputText value="#{currentUser.nom}" /></rich:column>
    						<rich:column><f:facet name="header"><h:outputText value="PRENOM" /></f:facet><h:outputText value="#{currentUser.prenom}" /></rich:column>
    						<rich:column><f:facet name="header"><h:outputText value="DELETE" /></f:facet><center><ajax:commandButton value="Supprimer" action="#{userModel.doDelete}" reRender="TABLE" /></center></rich:column>
    					</rich:dataTable></center>
    , c'est sur la collection que tu fais ta suppression, architecturement parlant, et non sur l'utilisateur lui-même, ca a pas de sens.
    Apres si ca marche pas essaie de faire un peu du pas à pas.
    je te remercie bcp maintenant ça marche
    il fallait faire ce que t'as dis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    					<center><rich:dataTable id="TABLE" value="#{userModel.dataModel}" var="myUser" width="300px">
    						<rich:column><f:facet name="header"><h:outputText value="NOM" /></f:facet><h:outputText value="#{myUser.nom}" /></rich:column>
    						<rich:column><f:facet name="header"><h:outputText value="PRENOM" /></f:facet><h:outputText value="#{myUser.prenom}" /></rich:column>
    						<rich:column><f:facet name="header"><h:outputText value="DELETE" /></f:facet><center><ajax:commandButton value="Supprimer" action="#{userModel.doDelete}" reRender="TABLE" /></center></rich:column>
    					</rich:dataTable></center>
    ++

  12. #12
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    De rien, mais juste un dernier conseil, t'as pas besoin d'un heritage explicite de la classe Object :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class UserModel extends Object
    , c la classe mere JAVA, toutes les autres en héritent.
    Bon courage pour la suite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression ligne datatable
    Par wakan dans le forum VB.NET
    Réponses: 4
    Dernier message: 14/09/2009, 09h59
  2. [BATCH] Suppression Ligne
    Par kilian dans le forum Windows
    Réponses: 2
    Dernier message: 24/05/2006, 14h02
  3. [VBA][EXCEL] pb suppression ligne
    Par megapacman dans le forum Access
    Réponses: 2
    Dernier message: 06/04/2006, 13h34
  4. [JTable] probleme suppression ligne
    Par lilou77 dans le forum Composants
    Réponses: 1
    Dernier message: 01/11/2005, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo