2016-03-03 3 views
1

J'écris une classe d'action dans laquelle je veux imprimer des erreurs en utilisant Struts2. Dans ma page JSP, j'ai une liste déroulante et j'ai 10 états dedans. Lorsque je déploie l'application, l'erreur de champ pour Null s'affiche toujours sans même cliquer sur un bouton. Je veux que cette erreur soit imprimée dans le cas où un utilisateur ne sélectionne aucun état de la liste déroulante.Comment valider Dropdown dans Struts2

Class Action:

public String modifyState() { 
     CatastropheDataTO catDataTo = new CatastropheDataTO(); 

     try { 
      catDataTo.setState(this.state); 
      catDataTo.setActive(Boolean.valueOf(this.active)); 
      catDataTo.setStartDate(this.startDate); 

      if(getState() != null || getActive() != null || getStartDate() != null) { 
       getCatastropheManager().updateCatastropheData(catDataTo); 
       addActionMessage(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_7).getMessageText()); 

      } else if(getState() == null){ 
       addFieldError("state", "Please select a state"); 
      } 

     } catch (Exception ex) { 
      addActionError(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_3028).getMessageText()); 
     } 
     return SUBMIT; 
    } 

D'une certaine façon le getState() est toujours nulle en raison de laquelle "Please select a state" montrent toujours, alors que je veux que ce soit imprimé si un utilisateur clique directement sur le bouton soumettre sans sélectionner l'état .

Répondre

0

Il suffit d'utiliser deux actions (that can be two methods of the same Java class), la première pour rendre la page, la seconde pour effectuer l'activité qui doit être exécutée après avoir appuyé sur le bouton.

Dans votre cas:

public String showStates() { 
    return SUCCESS; 
} 

public String modifyState() { 
    CatastropheDataTO catDataTo = new CatastropheDataTO(); 

    try { 
     catDataTo.setState(this.state); 
     catDataTo.setActive(Boolean.valueOf(this.active)); 
     catDataTo.setStartDate(this.startDate); 

     if(getState() != null || getActive() != null || getStartDate() != null) { 
      getCatastropheManager().updateCatastropheData(catDataTo); 
      addActionMessage(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_7).getMessageText()); 

     } else if(getState() == null){ 
      addFieldError("state", "Please select a state"); 
     } 

    } catch (Exception ex) { 
     addActionError(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_3028).getMessageText()); 
    } 
    return SUBMIT; 
} 

Cela dit, votre approche contourne les mécanismes du cadre, qui vous fournissent plusieurs méthodes pour effectuer la encastrables validation (validate(), XML, annotations ...). Le plus similaire à celui que vous utilisez est la méthode validate() qui (pour éviter que le problème précédemment expliqué ne se reproduise, peut être appliqué à une méthode seulement, plutôt qu'à toutes les méthodes d'action de la classe, avec . validateXXX() ou @SkipValidation

le résultat serait quelque chose comme:

@SkipValidation 
public String showStates() { // call this the first time 
    return SUCCESS; // or INPUT, or whatever 
} 

public void validate(){ 
    if(getState() == null){ 
     addFieldError("state", "Please select a state"); 
    } 
} 

public String modifyState() { 
    CatastropheDataTO catDataTo = new CatastropheDataTO(); 

    try { 
     catDataTo.setState(this.state); 
     catDataTo.setActive(Boolean.valueOf(this.active)); 
     catDataTo.setStartDate(this.startDate); 

     if(getActive() != null || getStartDate() != null) { 
      getCatastropheManager().updateCatastropheData(catDataTo); 
      addActionMessage(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_7).getMessageText()); 

     } 

    } catch (Exception ex) { 
     addActionError(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_3028).getMessageText()); 
    } 
    return SUBMIT; 
} 
+0

@Yousuf, l'esprit vous upvoting la réponse (si vous l'aimez) et l'accepter (si elle a travaillé) Merci –

+0

que je vois? vous n'avez jamais voté pour, ni accepté une réponse après 11 questions: | Y at-il une raison? derrière ça? Pour augmenter, appuyez sur la flèche haut dans le coin supérieur gauche de la réponse; pour accepter, appuyez sur le blanc V en le tournant au vert. http://stackoverflow.com/tour –