2014-09-04 2 views
2

Страница содержит форму, которая выглядит ниже.Проверка формы в Struts2

1) Если я вставляю в форму validate = "true", то после загрузки страницы заполните эту форму, отправьте запрос на действие электронной почты (на данный момент не была создана проверка xml).

2) После проверки xml был создан (в том же пакете с действием), затем действие, которое управляет запросом на эту страницу, возвращает страницу 404.

Я что-то пропустил?

<s:form action="mail" method="post"> 
<s:textfield name="name" key="Your name" size="20" /> 
<div style="clear: both;margin-top:10px"></div> 
<s:textarea label="Comment" name="comment" cols="65" rows="5"/> 
<s:submit method="mail" key="Send" align="left" 
    style="width:100px; height:35px; margin-top:20px"/> 
</s:form> 

проверки XML

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" 
    "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> 
<validators> 
    <field name="name"> 
     <field-validator type="required"> 
      <message>Please enter a user name</message> 
     </field-validator> 
    </field> 
    <field name="comment"> 
     <field-validator type="required"> 
      <message>Please enter your message</message> 
     </field-validator> 
    </field> 
</validators> 

Если я не добавить проверку, то все работает как надо.

struts.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
    <constant name="struts.devMode" value="true" /> 

    <constant name="struts.custom.i18n.resources" value="ApplicationResources" /> 

    <package name="default" namespace="/" extends="struts-default"> 

     <global-results> 
      <result name="Exception">/error404.jsp</result> 
     </global-results> 

     <global-exception-mappings> 
      <exception-mapping exception="java.lang.Throwable" result="Exception" /> 
     </global-exception-mappings> 

     <!-- loads page --> 
     <action name="main" 
      class="com.user.action.LoginAction" method="main"> 
      <result name="success">/main.jsp</result> 
     </action> 

     <!-- mail action --> 
     <action name="mail" class="com.user.action.LoginAction" method="mail" > 
      <result name="success">/main.jsp</result> 
     </action>  

    </package> 
</struts> 
+0

вы можете оставить распорки-конфигурационный XML? – user3487063

+0

@ user3487063, Я обновил вопрос – andy007

+0

Вам понадобится результат ввода, если ничего другого. Каково точное имя файла конфигурации проверки? –

ответ

1

INPUT является одним из predefined results, предоставленных Struts2;

В принципе, если действие посылает параметры, которые являются неправильными (ошибки преобразования, как если бы вы отправить "abc" в переменную Integer действий), или которые не проходят проверку, то Workflow перехватчик вернуть INPUT результат и следуйте путь, указанный в конфигурации расположений для этого действия.

Ваша проблема в том, что вы не определили какой-либо результат INPUT для своих действий, в то время как вы всегда должны.

Вы также можете установить глобальный результат ввода в качестве резервной копии, но будьте осторожны с этим ... как правило, страница, которую вы хотите отправить в случае INPUT, является тем же самым, от того, откуда был отправлен запрос.

В случае результата INPUT ваш метод действия (например, execute()) не выполняется, поэтому, если вы загружаете общие данные в этот метод, например, содержимое отдельных блоков, оно больше не будет доступно.

Прочитайте это ответы, чтобы полностью понять, что это означает, и как заставить его работать:

+0

до сих пор я реализовал метод проверки класса, но эта информация, без сомнения, также будет полезна – andy007

+0

@ Andy great. Помните, что также метод 'validate()' заканчивается результатом 'INPUT', если проверка не прошла;) –

Смежные вопросы