Domanda

Ho seguito il mio file 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>

Ho seguito il mio codice 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>

Ho un metodo di esecuzione come di seguito.

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;
}

Sto sostituendo il metodo di convalida come di seguito.

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

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

}

Ora, quando eseguo la mia azione, questo mi mostra il modulo con la casella combinata countryId piena di paesi.

Ora quando invio il modulo senza selezionare la casella combinata dovrebbe mostrarmi un errore.

Ma invece di mostrare l'errore " Seleziona il paese " Mi dà il seguente errore.

Rapporto problemi Struts

Struts ha rilevato un'eccezione non gestita:

Messaggi: tag 'seleziona', campo 'elenco', nome 'countryId': la chiave dell'elenco richiesta '% {countryListCombo}' non può essere risolta come raccolta / matrice / mappa / enumerazione / tipo iteratore. Esempio: persone o persone. {Nome}

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

Numero riga: 522

Qualcuno può dirmi perché è così?

Sembra che dopo il metodo validate () che abbia dato il risultato = " input " ;, non sta chiamando il metodo execute () e invece cerca di mostrare " /jsp/product_verification.jsp " pagina direttamente.

Per favore aiutami a risolvere il problema.

Grazie.

È stato utile?

Soluzione

Il tuo presupposto è corretto, quando viene aggiunto un errore di campo, per impostazione predefinita restituirà il " INPUT " risultato, causando il rendering del risultato di input. Suggerirei di esaminare l'implementazione preparabile, che ti consentirebbe di popolare sempre la casella combinata prima del rendering della pagina.

Altri suggerimenti

Devi aggiungere il codice della casella combinata nel metodo proprio come sotto:

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;
}

e aggiungi anche il seguente tag nella tua pagina jsp

<s:actionerror />

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top