Pergunta

Eu tenho o seguinte no meu arquivo 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>

Eu tenho o seguinte no meu 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>

Eu tenho o método executado como abaixo.

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

Estou substituindo o método validate como abaixo.

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

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

}

Agora, quando eu executar minha ação, isso me mostrará formulário com a caixa de combinação CountryID cheia de países.

Agora, quando eu envio o formulário sem selecionar a caixa de combinação, ele deve me mostrar erro.

Mas, em vez de mostrar erro "Selecione o país", ele me dá um erro seguinte.

Relatório de problemas de suporte

Struts detectou uma exceção não tratada:

Mensagens: Tag 'Selecione', Lista de campo ', nome' countryId ': a chave da lista solicitada'%{countrylistcombo} 'não pôde ser resolvida como um tipo de coleção/array/map/enumeração/iterador. Exemplo: pessoas ou pessoas. {Nome}

Arquivo: org/apache/jasper/servlet/jspservletwrapper.java

Número da linha: 522

Alguém pode me dizer por que é assim?

Parece que, após o Validate (), dando resultado = "entrada", ele não está chamando o método Execute () e, em vez disso, tenta mostrar diretamente "/jsp/product_verification.jsp".

Por favor me ajude a resolver o problema.

Obrigado.

Foi útil?

Solução

Sua suposição está correta, quando um erro de campo é adicionado, ele retornará padrão o resultado "entrada", fazendo com que o resultado da entrada seja renderizado. Eu sugiro procurar a implementação de preparação, o que permitiria que você sempre preencha o ComboBox antes da renderização da página.

Outras dicas

Você precisa adicionar seu código de caixa combinado no método, como abaixo:

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 também adicione a seguinte tag na sua página JSP

<s:actionerror />

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top