Вопрос

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

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

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 обнаружил необработанное исключение:

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

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

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

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

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

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

Спасибо.

Это было полезно?

Решение

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

Другие советы

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

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 />

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top