Precisa de ajuda na validação do Struts2
-
06-07-2019 - |
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.
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 />