Pregunta

Tengo seguimiento en mi archivo 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>

He seguido en mi código 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>

Tengo el método de ejecución como se muestra a continuación.

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

Estoy anulando el método de validación como se muestra a continuación.

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

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

}

Ahora, cuando ejecuto mi acción, me mostrará el formulario con el cuadro combinado countryId lleno de países.

Ahora, cuando envío el formulario sin seleccionar el cuadro combinado, debería mostrarme un error.

Pero en lugar de mostrar el error " Seleccione el país " Me da el siguiente error.

Informe de problemas de Struts

Struts ha detectado una excepción no controlada:

Mensajes: etiqueta 'seleccionar', campo 'lista', nombre 'countryId': la clave de lista solicitada '% {countryListCombo}' no se pudo resolver como una colección / matriz / mapa / enumeración / tipo de iterador. Ejemplo: personas o personas. {Name}

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

Número de línea: 522

¿Puede alguien decirme por qué es así?

Parece que después del método validate () dando resultado = " input " ;, no está llamando al método execute () y en su lugar intenta mostrar " /jsp/product_verification.jsp " página directamente.

Por favor, ayúdame a resolver el problema.

Gracias.

¿Fue útil?

Solución

Su suposición es correcta, cuando se agrega un error de campo, por defecto devolverá " INPUT " resultado, lo que hace que se procese el resultado de entrada. Sugeriría buscar la implementación de preparable, lo que le permitiría llenar siempre el cuadro combinado antes de renderizar la página.

Otros consejos

Debe agregar su código de cuadro combinado en el método como se muestra a continuación:

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

y también agregue la siguiente etiqueta en su página jsp

<s:actionerror />

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top