Отображение сообщений проверки в struts 2

У меня есть форма в моем приложении, в которой я хочу проверить ввод пользователя. У него есть поле со списком, которое заполняется из таблицы БД. Поэтому я должен сначала перейти к классу действий, чтобы заполнить его (например, populateFormAction). Затем он перейдет на страницу form.jsp.

Но проблема во время проверки. Я установил populateFormAction в качестве входного результата следующим образом

<result name="input" type="redirect">/populateFormAction</result>

Но когда он вернулся к form.jsp, он не показывает ошибок проверки. Я думаю, это из-за использования populateFormAction между обработчиком действий и form.jsp.


person shin    schedule 12.04.2011    source источник


Ответы (2)


Есть два решения вашей проблемы

  1. Вызовите метод, который заполняет комбинацию, прежде чем возвращать INPUT (если есть какая-либо ошибка проверки). И тогда не используйте перенаправление типа, вместо этого сразу переходите к вашему form.jsp. Конечно, это было бы возможно, если бы у вас были методы заполнения и проверки в одном и том же классе действий.

  2. Передайте свои ошибки действий в качестве параметров для populateFormAction следующим образом. >здесь

Я не уверен, будет ли 's' после actionError или нет, поэтому попробуйте оба

person Anupam    schedule 12.04.2011
comment
Привет, Ану, спасибо за твой ответ. Но я почувствовал некоторые сомнения с вашими предложениями. Для 1-го: я использую проверку struts-2 по умолчанию, а не какие-либо методы. Для 2-го: значения заполнения берутся из базы данных, поэтому значений может быть больше, поэтому я думаю, что невозможно добавить параметр в xml. - person shin; 18.04.2011
comment
Если вы используете validation.xml, то первое — это не решение. Для второго я говорил о передаче ошибок в виде параметров, а не значений db в struts.xml. Я нашел эту ссылку который, я думаю, будет вам полезен - person Anupam; 18.04.2011
comment
Полезна ли цепочка типов результатов в этой ситуации? - person shin; 18.04.2011
comment
да, конечно, но он покажет первый URL-адрес действия в браузере после всей операции, а не последний. Вы можете использовать его, если у вас нет проблем с этим - person Anupam; 18.04.2011
comment
type-chain требуется только для первого сопоставления, и, кстати, вы никогда не упоминали о сопоставлении populateEmployee_Registration ранее. Я могу помочь вам, если вы покажете некоторый код вашего класса и сопоставления обоих классов не только для ввода, но и для других сопоставлений. - person Anupam; 18.04.2011
comment
Но использование цепочки показывает ошибку, так как обнаружена бесконечная рекурсия при использовании ‹result name=input type=chain›populateFormAction‹/result› и состояния HTTP 404 — нет действия, сопоставленного для пространства имен / и имени действия /populateFormAction при использовании ‹result name=input type=chain›/populateFormAction‹/result› - person shin; 18.04.2011
comment
‹имя действия=*Employee_Registration class=employee.Employee_Registration method={1}› ‹result type=redirect›/viewEmployee_Registration‹/result› ‹result name=failure type=redirect›/viewEmployee_Registration‹/result› ‹result name=populated› /Employee_RegForm.jsp‹/result› ‹имя результата=viewAdded›/ViewEmpDetails.jsp‹/result› ‹имя результата=edit populated›/EditEmpDetails.jsp‹/result› ‹имя результата=input type=chain›/populateEmployee_Registration‹/ результат› ‹/действие› - person shin; 18.04.2011
comment
Приведенный выше комментарий является содержимым этого конкретного класса действий. - person shin; 18.04.2011
comment
Сначала он перейдет к populateEmployee_Registration, чтобы заполнить поле со списком в моей форме, которое возвращает заполненную строку, а затем будет перенаправлено в файл Employee_RegForm.jsp, где требуется проверка. При отправке этой формы и в случае успешной проверки она перейдет к действию viewEmployee_Registration. Если проверка не пройдена, проверка возвращает введенную строку и перенаправляет действие populateEmployee_Registration для повторного заполнения поля со списком и отображения формы. - person shin; 18.04.2011
comment
'‹result name=input type=chain›populateFormAction‹/result›' присутствует в сопоставлении действия 'populateEmployee_Registration'. Можете ли вы показать мне сопоставления, где присутствует указанное выше - person Anupam; 18.04.2011
comment
На самом деле это populateEmployee_Registration, я обобщил его как populateFormAction во время задания вопроса. - person shin; 18.04.2011
comment
Хорошо. Вы также определили ввод результатов в сопоставлении populateEmployee_Registration? Если да, что это за сопоставление? - person Anupam; 18.04.2011
comment
‹имя действия=*Employee_Registration class=employee.Employee_Registration method={1}› . Приведенное выше сопоставление также предназначено для populateEmployee_Registration. Я использую *(asterik) для отображения подстановочных знаков. Затем всякий раз, когда приходит запрос к populateEmployee_Registration, он выполняет вышеуказанное действие и выполняет метод populate() своего класса. Метод populate() возвращает заполненную строку и вызывает соответствующий результат. - person shin; 18.04.2011
comment
О, это да, он показывает, что обнаружена ошибка бесконечной рекурсии. Он снова и снова выполняет одно и то же действие, одно и то же отображение, т.е. ввод. почему бы вам не попробовать написать отдельный только для отладки - person Anupam; 18.04.2011
comment
хм интересная проблема тогда. Вы прошли по ссылке, которую я дал? Я никогда не пробовал, но это может помочь - person Anupam; 18.04.2011
comment
Я не пробовал, я думал, что "цепочка типов результатов" решит эту проблему. ссылку попробую. Спасибо за вашу помощь. - person shin; 19.04.2011

вы можете использовать «MessageStoreInterceptor», чтобы сохранить сообщения.

person pramod    schedule 18.04.2011