Bonjour,
je débute avec struts 2.
Je me suis fait une petite appli très simple de login, logout avec création de session si l'utilisateur existe en base. Si c'et le car je met l'utilisateur en session. Pour la déconnexion de l'application un lien pointe vers une autre action pour vider la session et retourner sur la page d'accueil.
J'ai une page loginForm.jsp
puis j'ai une classe LoginAction dans laquelle j'ai trois méthodes: openSession, closeSession et une méthode validate() pour vérifier si le inputLogin et inputPassword ne sont pas vide:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <s:form role="form" action="openSession" method="post"> <s:textfield id="inputLogin" name="inputLogin"/> <s:password id="inputPassword" name="inputPassword"/> <s:submit value="se connecter"/> </form>
Enfin voici mes deux action dans j'ai mon struts.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class LoginAction extends ActionSupport { private String inputLogin; private String inputPassword; private UserEntity user; public String openSession() {...} public String closeSession(){...} public void validate(){...} }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <action name="openSession" class="org.action.user.LoginAction" method="openSession"> <interceptor-ref name="validationWorkflowStack" /> <result name="success" type="redirect">/index.jsp</result> <result name="input">/index.jsp</result> </action> <action name="closeSession" class="org.action.user.LoginAction" method="closeSession"> <result name="success" type="redirect">/index.jsp</result> </action>
Et voici le début du message d'erreur qui s'affiche lorsque je clique sur le lien de déconnexion:
java.lang.NullPointerException
org.action.user.LoginAction.validate(LoginAction.java:71)
com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:251)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
Je ne maitrise pas du tout les conceptes des interceptor et je penses que le problème viens de la metode validate() qui vérifie a chaque fois les valeur de inputLogin et inputPassword même lorsque je fais appel a ma méthode closeSession.
Pour infos j'ai teste de creer une nouvelle class LogoutAction et déplacer ma méthode closeSession a l'intérieur de cette dernière. et ca fonctionne.
Mais j'aurais bien voulu utiliser une seule class LoginAction avec mes deux methode (openSession et closeSession).
Merci pour votre aide.
Partager