Question

J'ai suivi dans mon fichier struts.xml

<action name="ProductVerification" class="com.frontend.ProductVerification">
    <result name="success">/jsp/product_verification.jsp</result>
    <result name="input">/jsp/product_verification.jsp</result>
    <result name="error">/jsp/product_verification.jsp</result>
</action>

j'ai suivi dans mon code html     

<s:form name="frmVerification" id="frmVerification" onsubmit="Javascript: return checkFrmVerification(this);"  >

<s:select name="countryId" id="cmbcountryid"  headerKey="0"  headerValue="%{getText('label.Please_Select')}" list="%{countryListCombo}" listKey="countryId" listValue="country" value="countryId" cssClass="style2" onchange="Javascript: GetCities();" required="true" />

<s:submit name="submit" src="images/submit_btn.jpg" type="image" value="submit" />

</form>

J'ai une méthode d'exécution comme ci-dessous.

public String execute() throws Exception {

    Session session = this.getHibernateSession();

    Transaction tx = session.beginTransaction();

    //Following will set combo box containing country list
    this.setCountryListCombo();

    tx.commit();

    return SUCCESS;
}

Je remplace la méthode de validation comme ci-dessous.

@Override
public void validate() {
 HttpServletRequest request = this.getServletRequest();

     if(request.getParameter(countryId) == 0){
          addFieldError("countryId", "Please select country");
     }

}

Maintenant, lorsque j'exécuterai mon action, il me montrera le formulaire avec la liste déroulante countryId remplie de pays.

Maintenant, lorsque je soumets un formulaire sans sélectionner de liste déroulante, une erreur doit s'afficher.

Mais au lieu d'afficher l'erreur " Veuillez sélectionner le pays " Cela me donne l'erreur suivante.

Rapport de problème Struts

Struts a détecté une exception non gérée:

Messages: balise 'select', champ 'list', nom 'countryId': la clé de liste demandée '% {countryListCombo}' n'a pas pu être résolue en tant que collection / array / map / enumeration / type d'itérateur. Exemple: personnes ou personnes. {Name}

Fichier: org / apache / jasper / servlet / JspServletWrapper.java

Numéro de ligne: 522

Quelqu'un peut-il me dire pourquoi il en est ainsi?

Il semble qu'après la méthode validate () donnant result = " input " ;, elle n'appelle pas la méthode execute () mais tente d'afficher & "/jsp/product_verification.jsp " page directement.

Aidez-moi à résoudre le problème.

Merci.

Était-ce utile?

La solution

Votre hypothèse est correcte. Lorsqu'une erreur de champ est ajoutée, elle renvoie par défaut le & "INPUT &"; résultat, entraînant le rendu du résultat d'entrée. Je suggérerais d’envisager la mise en oeuvre de preparable, ce qui vous permettrait de toujours renseigner la liste déroulante avant le rendu de la page.

Autres conseils

Vous devez ajouter votre code de zone de liste déroulante dans la méthode, comme ci-dessous:

public String execute() throws Exception {

//add this code also as per your comobobx code
countryList = new ArrayList<Country>();
        countryList.add(new Country(1, "India"));
        countryList.add(new Country(1, "Shri Lanka"));
        countryList.add(new Country(1, "USA"));
        countryList.add(new Country(1, "Pakistan"));
        countryList.add(new Country(1, "NewsLnad"));

//add this code also as per your comobobx code

    Session session = this.getHibernateSession();

    Transaction tx = session.beginTransaction();

    //Following will set combo box containing country list
    this.setCountryListCombo();

    tx.commit();

    return SUCCESS;
}

et ajoutez également la balise suivante à votre page jsp

<s:actionerror />

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top