Нужна помощь в Struts2 проверки - PullRequest
0 голосов
/ 20 июня 2009

У меня есть следующее в моем файле 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>

У меня есть следующий в моем 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>

У меня есть метод execute, как показано ниже.

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

Я переопределяю метод проверки, как показано ниже.

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

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

}

Теперь, когда я выполню свое действие, оно покажет мне форму со списком countryId, заполненным странами.

Теперь, когда я отправляю форму без выбора поля со списком, она должна показывать мне ошибку.

Но вместо сообщения об ошибке «Пожалуйста, выберите страну» выдается следующая ошибка.

Отчет о проблеме Struts

Struts обнаружил необработанное исключение:

Сообщения: тег 'select', поле 'list', name 'countryId': Запрошенный ключ списка '% {countryListCombo}' не может быть разрешен как коллекция / массив / карта / перечисление / Тип итератора. Пример: люди или люди. {Имя}

Файл: org / apache / jasper / servlet / JspServletWrapper.java

Номер строки: 522

Может кто-нибудь сказать мне, почему это так?

Похоже, что после того, как метод validate () дал результат = "input", он не вызывает метод execute () и вместо этого пытается напрямую отобразить страницу "/jsp/product_verification.jsp".

Пожалуйста, помогите мне решить проблему.

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Вам необходимо добавить свой код поля со списком в метод, как показано ниже:

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

, а также добавьте следующий тег на страницу jsp

<s:actionerror />

1 голос
/ 25 июня 2009

Ваше предположение верно, когда добавляется ошибка поля, по умолчанию он возвращает результат «ВХОД», вызывая визуализацию входного результата. Я бы посоветовал изучить реализацию preparable, которая позволит вам всегда заполнять поле со списком перед отображением страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...