2010-09-12 6 views
1

Je développe une Struts2 très simple aplication, et je reçois cet étrange (et facile à résoudre, je suis sûr) Problème:Comment valider un formulaire que si l'utilisateur a soumis quelque chose (avec Struts2)

quand j'accède directoly à URL de connexion, il montre formulaire de connexion (champs nom d'utilisateur et texte de mot de passe) avec ces erreurs:

Name field is required 
Password is required 

le champ sont vides, parce que c'est la première fois que l'utilisateur y entrer, donc je tiens à dire au système de validation Struts2 de ne pas valider à moins que l'utilisateur ne soumette le formulaire de connexion avec un nom d'utilisateur et un mot de passe. Je suis sûr que je néglige ou oublie quelque chose.

code d'action Login.java:

package actions.access; 

import actions.base.BaseAction; 
import data.Webuser; 

public class Login extends BaseAction { 

    private Webuser user; 

    public String execute() { 
     if (user != null) { 
      session = this.getSession(); 
      if (session.get("user-logged") == null) { 
       session.put("user-logged", user.getId()); 
      } 
     } 
     return SUCCESS; 
    } 

    public void validate() { 
     if (user != null) { 
      Webuser realUser = services.getWebuserByNickname(user.getNickname()); 
      if (realUser.getPass().equals(user.getPass())) { 
       user.setId(realUser.getId()); 
      } else { 
       addFieldError("user.nickname", "Nickname or password are wrong"); 
      } 
     } 
    } 

    public Webuser getUser() { 
     return user; 
    } 


    public void setUser(Webuser user) { 
     this.user = user; 
    } 

} 

Code Connexion-validation.xml:

<field name="user.nickname"> 
    <field-validator type="requiredstring"> 
     <param name="trim">true</param> 
     <message>Login name is required</message> 
    </field-validator> 
</field> 

<field name="user.pass"> 
    <field-validator type="requiredstring"> 
     <param name="trim">true</param> 
     <message>Password is required</message> 
    </field-validator> 
</field> 

Toute sorte d'aide sera appréciée. Merci d'avance.

Répondre

0

vous avez besoin de deux actions.

  1. Votre identifiant de connexion redirigeant vers votre login.jsp.

  2. Une action LoginSubmit qui gère le processus de connexion.

pour le second, vous pouvez définir votre validation.

+0

Vous n'avez pas besoin de deux actions et l'utilisation de deux actions ajoute du code inutile. –

0

Vous avez besoin d'une action redirigeant vers login.jsp et d'une autre action qui gère le processus de connexion et la validation. A l'intérieur de la première action, n'écrivez rien, mettez juste result = success.

public class IndexAction extends ActionSupport 
{ 


    public String execute() throws Exception 
    { 
     return SUCCESS; 
    } 
} 

Les entrées struts.xml sont comme suit:

<action name="login" class="com.test.web.LoginAction"> 
<result name="input">/pages/login.jsp</result> 
    <result name="success" >/pages/welcome.jsp</result>  
</action> 
<action name="index" class="com.test.web.IndexAction"> 
    <result name="success">/pages/login.jsp</result> 
</action> 
+0

L'utilisation de deux actions ajoute du code inutile et n'évolue pas correctement. Vous finirez avec 2x classes d'action chaque fois que vous devez être en mesure de traiter un formulaire. Ack! –

0

Une façon d'éviter ce problème est, dans votre fichier web.xml ont une entrée pour la liste des fichiers de bienvenue. Cela devrait pointer vers votre page de connexion. Dès que vous démarrez votre application, cette page de connexion s'ouvrira sans aucune action et validation.

<welcome-file-list> 
    <welcome-file>Login.jsp</welcome-file> 
</welcome-file-list> 

Après le démarrage de votre serveur, vous pouvez accéder à votre application en donnant au format URL ci-dessous

"http://localhost:8080/ApplicationContext"
ici 8080 - est le port HTTP par défaut, il peut être différent dans votre cas. ApplicationContext est le contexte de votre application.

Je pense que d'autres choses devraient fonctionner correctement.

1

Ce que vous cherchez est d'utiliser la même action pour montrer un formulaire et ensuite (après soumettre) traiter le formulaire.

public class LoginAction { 
    @SkipValidation 
    public String execute() throws Exception { 
     return INPUT; // shows the form 
    } 

    public void validate() { 
     // do your validations here... 
    } 

    public String submit() throws Exception { 
     // process the form 
     // redirect somewhere 
    } 
} 

Votre formulaire doit soumettre à « ouvrir une session! Soumettre » (c'est Méthode appel dynamique, qui invoque votre méthode submit()). Vous n'avez pas besoin d'utiliser deux actions pour cela.

Questions connexes