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

Spring Web Java Discussion :

bean SimpleFormController - probleme avec l'objet commande


Sujet :

Spring Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut bean SimpleFormController - probleme avec l'objet commande
    Voici mon probleme, si quelqu'un a une réponse, même minime, cela m'aiderai.

    J'ai ce bean dans mon xxx-servlet.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
    <bean id="LoginProcessController"
    		 class="ca.MyDomain.MyDomainweb.web.LoginProcessController">
    		<property name="sessionForm">
    			<value>true</value>
    		</property>
    		<property name="commandClass">
    			<value>ca.MyDomain.MyDomainweb.security.impl.UserLoginAndPassImpl</value>
    		</property>
    		<property name="commandName">
    			<value>commandUserLoginAndPass</value>
    		</property>
    		<property name="formView">
    			<value>login</value>
    		</property>
    		<property name="successView">
    			<value>confirmationLogin</value>
    		</property>
    	 </bean>
    Qui est appelé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    		<property name="mappings">
    			<props>
    				<prop key="/list.do">ListController</prop>		
    				<prop key="/login.do">LoginProcessController</prop>
    				<prop key="/*.do">viewController</prop>
    			</props>
    		</property>
    	</bean>
    J'ai mon fichier vues.properties qui contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    login.class=org.springframework.web.servlet.view.tiles.TilesJstlView
    login.url=login
    Et un fichier definitions.xml qui contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	<definition name="template" page="/WEB-INF/vues/main.jsp">			
    	</definition>
    <definition name="login" extends="template">
    		<put name="content" value="/WEB-INF/vues/login.jsp" type="page"/>		
    	 </definition>
    Jusqu'ici tout va bien, voila ce qui cloche dans mon fichier login.jsp que voila:
    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
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    <%@ page isELIgnored="false" %>
     
    Page de login
    <form method=post>
    	<table border="5">
    	<!-- champ de saisie -->
    		<tr>
    			<td>Nom d''usager</td>
    			<td>
    				<input type="text" name="commandUserLoginAndPass.username" value="tapez un texte">
    			</td>
    		</tr>
    	<!-- mot de passe -->
    		<tr>
    			<td>Mot de passe</td>
    			<td>
    				<input type="password" name="commandUserLoginAndPass.password" value="motDePasse">
    			</td>
    		</tr>
    	</table>
    	<input type="submit" value="Envoyer">
    </form>
    Je n'arrive pas a récupérer mon object commandUserLoginAndPass.
    Lorsque j'essaie de le lire a partir de mon SimpleFormController que voici:
    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
    	protected ModelAndView onSubmit(Object commandUserLoginAndPass){
     
    		Map<String,SafUserData> model = new HashMap<String,SafUserData>();
    		SafUserData data = new SafUserData();
    		SafUserData definition = new SafUserData();
    		Integer id = 0;
    		String nom = new String();
    		String pass = new String();
    		String vue = new String();
    		String enable = new String();
     
    		if ( log.isDebugEnabled() ){
    			log.debug( "commandUserLoginAndPass = " + commandUserLoginAndPass.getClass() );
    			log.debug( "((UserLoginAndPassImpl) commandUserLoginAndPass).getUsername() = " + ((UserLoginAndPassImpl) commandUserLoginAndPass).getUsername() );
    			log.debug( "((UserLoginAndPassImpl) commandUserLoginAndPass).getPassword() = " + ((UserLoginAndPassImpl) commandUserLoginAndPass).getPassword() );
     
    		}
    		...
    J'obtient le résultat suivant avec log4J
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DEBUG [LoginProcessController:434] 2009-03-13 16:20:02,683 - Removing form session attribute [ca.MyDomain.MyDomainweb.web.LoginProcessController.FORM.commandUserLoginAndPass]
    DEBUG [LoginProcessController:266] 2009-03-13 16:20:02,699 - No errors -> processing submit
    DEBUG [LoginProcessController:53] 2009-03-13 16:20:02,699 - commandUserLoginAndPass = class ca.MyDomain.MyDomainweb.security.impl.UserLoginAndPassImpl
    DEBUG [LoginProcessController:54] 2009-03-13 16:20:02,699 - ((commandUserLoginAndPass) commandUserLoginAndPass).getUsername() = null
    DEBUG [LoginProcessController:55] 2009-03-13 16:20:02,714 - ((commandUserLoginAndPass) commandUserLoginAndPass).getPassword() = null
    Voici ma classe récupérant mon username et password
    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
    public class UserLoginAndPassImpl implements UserLoginAndPass {
     
    	private String username;
    	private String password;
     
    	public String getUsername(){
    		return this.username;
    	}
    	public void setUsername(String username){
    		this.username = username;
    	}
     
    	public String getPassword(){
    		return this.password;
    	}
     
        public void setPassword(String password){
    		this.password = password;
    	}
     
    }
    Si quelqu'un a une idée du pourquoi je ne peux récupérer mon username et password dans mon LoginProcessController, meme une petite idée pourrait surement m'aider. Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 89
    Par défaut
    Bonjour, normalement tu devrais avoir dans ton simpleform l'objet
    UserLoginAndPassImpl
    .

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    Voici mon SimpleFormController
    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
    <bean id="LoginProcessController"
    		 class="ca.MyDomain.MyDomainweb.web.LoginProcessController">
    		<property name="sessionForm">
    			<value>true</value>
    		</property>
    		<property name="commandClass">
    			<value>ca.MyDomain.MyDomainweb.security.impl.UserLoginAndPassImpl</value>
    		</property>
    		<property name="commandName">
    			<value>commandUserLoginAndPass</value>
    		</property>
    		<property name="formView">
    			<value>login</value>
    		</property>
    		<property name="successView">
    			<value>confirmationLogin</value>
    		</property>
    </bean>
    Mon objet UserLoginAndPassImpl est bien là, dans la property commandClass

  4. #4
    Membre expérimenté Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Par défaut
    Bonjour,

    Personnelement quand j'ai développé des SimpleFormController je n'ai pas eu à mettre le nom de ma classe dans le nom de mes input.

    Je ne sais pas si ca change quelque chose car le mapping est implcite dans mon cas mais en comparant avec mon code pour un exemple similaire j'ai vu cette différence.

    Ma réponse serait donc de remplacer tes inputs du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" name="commandUserLoginAndPass.username" value="tapez un texte">
    vers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" name="username" value="tapez un texte">
    En espérant que ce soit l'erreur

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    Merci d'avoir pris le temps de répondre, j'ai opté pour cette solution,
    ce qui me pose un nouveau probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form action="<c:url value='j_spring_security_check'/>" method="POST">
     
    	<label for="j_username">Username</label>
    	<input type="text" name="j_username" id="j_username"/>
    	<br/>
    	<label for="j_password">Password</label>
    	<input type="password" name="j_password" id="j_password"/>
    	<br/>
    	<input type="submit" value="Login"/>
    </form>
    si je veux utiliser les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <intercept-url pattern="/adminAcceuil.do" access="ROLE_ADMIN" />
    je dois implanter ce security namespace
    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
    <beans:beans xmlns="http://www.springframework.org/schema/security"
        xmlns:beans="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://www.springframework.org/schema/security 
            http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">
     
     
    	<!--  -->
    	<!-- <logout logout-success-url="/index.do"/> -->
    	<http auto-config='true' access-denied-page="/index.do" entry-point-ref="formLoginAuthenticationEntryPoint">
     
    		<intercept-url pattern="/adminAcceuil.do" access="ROLE_ADMIN" />  
    		<intercept-url pattern="/userAcceuil.do" access="ROLE_USER" />
    		<intercept-url pattern="/*.do" access="IS_AUTHENTICATED_ANONYMOUSLY" />
     
    		<form-login login-page="/login.do" default-target-url="/confirmationLogin.do"/>
     
    	</http>
     
     
     
     
    	<authentication-provider user-service-ref="userDetailsService"/>
     
    	<authentication-manager alias="authenticationManager"/>
     
    </beans:beans>
    Mais cela semble entrer en conflit avec le namespace standard:
    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
    <bean id="formAuthenticationProcessingFilter"
    		class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
    		<property name="filterProcessesUrl">
    			<value>/j_spring_security_check</value>
    		</property>
    		<property name="authenticationFailureUrl">
    			<value>/authenticationFailed.do</value>
    		</property>
    		<property name="defaultTargetUrl">
    			<value>/confirmationLogin.do</value>
    		</property>
    		<property name="authenticationManager">
    			<ref bean="authenticationManager" />
    		</property>
    	</bean>
    Ma question:
    Est-ce qu'il est normal que je dois définir ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <bean id="formLoginAuthenticationEntryPoint"
    		class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
    		<property name="loginFormUrl">
    			<value>/login.do</value>
    		</property>
    		<property name="forceHttps">
    			<value>true</value>
    		</property>
    	</bean>
    alors que la page 'login.do' est déja spécifié dans mon sécurity namespace plus haut. Des idées ?

Discussions similaires

  1. probleme avec l'objet PageControl
    Par tchimou dans le forum Bases de données
    Réponses: 4
    Dernier message: 19/04/2007, 12h06
  2. probleme avec programmation objet
    Par kain31 dans le forum C++
    Réponses: 5
    Dernier message: 17/04/2007, 11h29
  3. Probleme avec l'objet PDO en PHP
    Par krovomi dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 03/05/2006, 12h18
  4. Réponses: 2
    Dernier message: 28/03/2006, 03h36
  5. Probleme avec guillemets dans commande HREF
    Par angelevil dans le forum ASP
    Réponses: 4
    Dernier message: 02/05/2005, 19h06

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