Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Валидация в struts


Автор: FcUK 22.2.2007, 11:37
Привет.
Вот питаюсь разобратса з валидацией в стратсе. как я понимаю возможно валидировать с помощю метода validate() используя клас
org.apache.struts.action.ActionForm. Еще можно через Validation Framework. То есть подключаем плагин и валидируем через готовие методи описание в validate-rules.xml, используя их в validate.xml.  Тут сразу 2 вопроса
1) Как создать свой валиратор в  Validation Framework?
2) Можно ли использовать метод validate() при валидации через Validation Framework?
Далее..есть еще Dynamic Forms. Как я понял там в бинах нужно огласить все поля форм и потом не нужно никаких методов getXXX() и setXXX(). 
3) Какие недостатки Dynamic Forms?
4) Я так понял что их валидировать можно через Validation Framework. А можно ли через метод  validate()??
И еще нифига не понял про LazyValidatorForm. Напишите плз пару слов о ихз плюсах и недостатках и как их юзать. Спасибо

Автор: Scarlett 28.9.2007, 16:26
кто-то уже кидал тему про валидацию

повторяю для тебя то, что сама делала
Вообще по стратсам есть очень хорошая книга, помимо самого основного сайта, "Struts in Action" издательства Manning
Почитатай

с Dynamic Forms по мне хорошо использовать, когда нет большой необходимости как-то по своему определять форму

 В Struts есть возможность, которая упрощает всю валидацию страниц как на стороне клиента, так и на стороне сервера. 
При этом форма, которая проверяется, должна наследоваться от ValidatorForm и реализовывать интерфейс Serializable.

Для валидации используются специальная библиотека. Про это можно прочитать на официальном сайте стратсов http://struts.apache.org/1.x/faqs/validator.html

Для примера валидации ниже я использовала Dynamic Form, описанный в конфиг-файле как:
Код

<form-bean 
                name="authorizedForm" 
                type="org.apache.struts.validator.DynaValidatorForm">
            <form-property 
                    name="username" 
                    type="java.lang.String"/>
        </form-bean>


Всего-то нужно подключить библиотеку - в WEB-INF в lib дописать файлы jakarta-regexp_1_2.jar, commons-validator.jar, jakarta-oro.jar
Может еще другие понадобятся.
В WEB-INF сохранить стандартный файл с правилами проверки валидатора validator-rules.xml
В нем есть возможность проверки как на стороне клиента, так и сервера
На его основе написать свой файл проверки нужных форм, например, файл validation.xml:
Код

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
    
    <!-- ========================= Default Formset ========================= -->
    <formset>
    
    <!-- Validate authorization form -->
    <form name="authorizedForm">
       <field property="username" depends="required,mask,minlength">
         <msg name="mask" key="authorize.username.maskmsg"/>
         <arg0 key="authorize.userName"/>
         <arg1 name="minlength" key="${var:minlength}" resource="false"/>
         <var>
             <var-name>mask</var-name>
             <var-value>^[a-zA-Z]\w*$</var-value>
         </var>
         <var>
             <var-name>minlength</var-name>
             <var-value>3</var-value>
         </var>
       </field>
    </form>
    
    [I]................другие проверки..........[/I]
    </formset>

</form-validation>



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

В конфиге стратсов подключаем нужный плагин- struts-config.xml:
Код

<struts-config>
..................
    <!-- ========== ValidatorPlugin settings =============================== -->
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property 
                property="pathnames" 
                value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
    </plug-in>
................
</struts-config>


Для отображения ошибок на странице можно воспользоваться кодом на jsp:
Код

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:messagesPresent>
    <table>
        <tr>
         <td colspan="3">
                <html:errors footer="errors.footer" 
                        header="errors.header" 
                        prefix="errors.prefix" 
                        suffix="errors.suffix"/>
            </td>
        </tr>
    </table>
</logic:messagesPresent>

<logic:messagesPresent message="true">
    <table>
        <tr>
         <td colspan="3">
                <html:messages id="message" message="true" 
                        footer="messages.footer" 
                        header="messages.header">
                    <div>
                 <bean:message key="messages.prefix"/>
                 <bean:write name="message"/>
                 <bean:message key="messages.suffix"/>
                 </div>
                </html:messages>
            </td>
        </tr>
    </table>
</logic:messagesPresent>

значение "errors.***" и "messages.***" хранятся в файле свойств, там же хранятся и значения ошибок (те, котоыре закомментины в файле правил валидации).

И последнее - настройка формы на проверку на странице:
Код

..............................
<html:form action="authorize" focus="username" 
                        onsubmit="return validateAuthorizedForm(this);">
                    <table>
                        <tr >
                            <th colspan="2" class="authorize">
                                <bean:message key="authorize.formName"/>
                            </th>
                        </tr>
                        <tr>
                            <th colspan="2">&nbsp;</th>
                        </tr>
                        <tr>
                            <th>
                                <bean:message key="authorize.userName"/>
                            </th>
                             <td align="left">
                                   <html:text property="username" 
                                           size="16" maxlength="18"/>
                             </td>
                        </tr>
                        <tr>
                             <td align="right">
                                 <html:submit>
                                       <bean:message key="button.submit"/>
                                   </html:submit>
                             </td>
                             <td align="left">
                                   <html:reset>
                                     <bean:message key="button.reset"/>
                                   </html:reset>
                             </td>
                        </tr>
                    </table>
                </html:form>
...........................


А для подключения проверки на стороне клиента, т.е. через java-script, в конце всего-то написать:
Код


<html:javascript formName="authorizedForm"/>


и о-ля-ля - все готово.
В общем более подробно смотри ссылку, которую я указала выше smile




Автор: Scarlett 28.9.2007, 16:54
кто-то уже кидал тему про валидацию

повторяю для тебя то, что сама делала
Вообще по стратсам есть очень хорошая книга, помимо самого основного сайта, "Struts in Action" издательства Manning
Почитатай

с Dynamic Forms по мне хорошо использовать, когда нет большой необходимости как-то по своему определять форму

 В Struts есть возможность, которая упрощает всю валидацию страниц как на стороне клиента, так и на стороне сервера. 
При этом форма, которая проверяется, должна наследоваться от ValidatorForm и реализовывать интерфейс Serializable.

Для валидации используются специальная библиотека. Про это можно прочитать на официальном сайте стратсов http://struts.apache.org/1.x/faqs/validator.html

Для примера валидации ниже я использовала Dynamic Form, описанный в конфиг-файле как:
Код

<form-bean 
                name="authorizedForm" 
                type="org.apache.struts.validator.DynaValidatorForm">
            <form-property 
                    name="username" 
                    type="java.lang.String"/>
        </form-bean>


Всего-то нужно подключить библиотеку - в WEB-INF в lib дописать файлы jakarta-regexp_1_2.jar, commons-validator.jar, jakarta-oro.jar
Может еще другие понадобятся.
В WEB-INF сохранить стандартный файл с правилами проверки валидатора validator-rules.xml
В нем есть возможность проверки как на стороне клиента, так и сервера
На его основе написать свой файл проверки нужных форм, например, файл validation.xml:
Код

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
    
    <!-- ========================= Default Formset ========================= -->
    <formset>
    
    <!-- Validate authorization form -->
    <form name="authorizedForm">
       <field property="username" depends="required,mask,minlength">
         <msg name="mask" key="authorize.username.maskmsg"/>
         <arg0 key="authorize.userName"/>
         <arg1 name="minlength" key="${var:minlength}" resource="false"/>
         <var>
             <var-name>mask</var-name>
             <var-value>^[a-zA-Z]\w*$</var-value>
         </var>
         <var>
             <var-name>minlength</var-name>
             <var-value>3</var-value>
         </var>
       </field>
    </form>
    
    [I]................другие проверки..........[/I]
    </formset>

</form-validation>



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

В конфиге стратсов подключаем нужный плагин- struts-config.xml:
Код

<struts-config>
..................
    <!-- ========== ValidatorPlugin settings =============================== -->
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property 
                property="pathnames" 
                value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
    </plug-in>
................
</struts-config>


Для отображения ошибок на странице можно воспользоваться кодом на jsp:
Код

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:messagesPresent>
    <table>
        <tr>
         <td colspan="3">
                <html:errors footer="errors.footer" 
                        header="errors.header" 
                        prefix="errors.prefix" 
                        suffix="errors.suffix"/>
            </td>
        </tr>
    </table>
</logic:messagesPresent>

<logic:messagesPresent message="true">
    <table>
        <tr>
         <td colspan="3">
                <html:messages id="message" message="true" 
                        footer="messages.footer" 
                        header="messages.header">
                    <div>
                 <bean:message key="messages.prefix"/>
                 <bean:write name="message"/>
                 <bean:message key="messages.suffix"/>
                 </div>
                </html:messages>
            </td>
        </tr>
    </table>
</logic:messagesPresent>

значение "errors.***" и "messages.***" хранятся в файле свойств, там же хранятся и значения ошибок (те, котоыре закомментины в файле правил валидации).

И последнее - настройка формы на проверку на странице:
Код

..............................
<html:form action="authorize" focus="username" 
                        onsubmit="return validateAuthorizedForm(this);">
                    <table>
                        <tr >
                            <th colspan="2" class="authorize">
                                <bean:message key="authorize.formName"/>
                            </th>
                        </tr>
                        <tr>
                            <th colspan="2">&nbsp;</th>
                        </tr>
                        <tr>
                            <th>
                                <bean:message key="authorize.userName"/>
                            </th>
                             <td align="left">
                                   <html:text property="username" 
                                           size="16" maxlength="18"/>
                             </td>
                        </tr>
                        <tr>
                             <td align="right">
                                 <html:submit>
                                       <bean:message key="button.submit"/>
                                   </html:submit>
                             </td>
                             <td align="left">
                                   <html:reset>
                                     <bean:message key="button.reset"/>
                                   </html:reset>
                             </td>
                        </tr>
                    </table>
                </html:form>
...........................


А для подключения проверки на стороне клиента, т.е. через java-script, в конце всего-то написать:
Код


<html:javascript formName="authorizedForm"/>


и о-ля-ля - все готово.
В общем более подробно смотри ссылку, которую я указала выше smile




Автор: Scarlett 28.9.2007, 17:56
кто-то уже кидал тему про валидацию

повторяю для тебя то, что сама делала
Вообще по стратсам есть очень хорошая книга, помимо самого основного сайта, "Struts in Action" издательства Manning
Почитатай

с Dynamic Forms по мне хорошо использовать, когда нет большой необходимости как-то по своему определять форму

 В Struts есть возможность, которая упрощает всю валидацию страниц как на стороне клиента, так и на стороне сервера. 
При этом форма, которая проверяется, должна наследоваться от ValidatorForm и реализовывать интерфейс Serializable.

Для валидации используются специальная библиотека. Про это можно прочитать на официальном сайте стратсов http://struts.apache.org/1.x/faqs/validator.html

Для примера валидации ниже я использовала Dynamic Form, описанный в конфиг-файле как:
Код

<form-bean 
                name="authorizedForm" 
                type="org.apache.struts.validator.DynaValidatorForm">
            <form-property 
                    name="username" 
                    type="java.lang.String"/>
        </form-bean>


Всего-то нужно подключить библиотеку - в WEB-INF в lib дописать файлы jakarta-regexp_1_2.jar, commons-validator.jar, jakarta-oro.jar
Может еще другие понадобятся.
В WEB-INF сохранить стандартный файл с правилами проверки валидатора validator-rules.xml
В нем есть возможность проверки как на стороне клиента, так и сервера
На его основе написать свой файл проверки нужных форм, например, файл validation.xml:
Код

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
    
    <!-- ========================= Default Formset ========================= -->
    <formset>
    
    <!-- Validate authorization form -->
    <form name="authorizedForm">
       <field property="username" depends="required,mask,minlength">
         <msg name="mask" key="authorize.username.maskmsg"/>
         <arg0 key="authorize.userName"/>
         <arg1 name="minlength" key="${var:minlength}" resource="false"/>
         <var>
             <var-name>mask</var-name>
             <var-value>^[a-zA-Z]\w*$</var-value>
         </var>
         <var>
             <var-name>minlength</var-name>
             <var-value>3</var-value>
         </var>
       </field>
    </form>
    
    [I]................другие проверки..........[/I]
    </formset>

</form-validation>



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

В конфиге стратсов подключаем нужный плагин- struts-config.xml:
Код

<struts-config>
..................
    <!-- ========== ValidatorPlugin settings =============================== -->
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property 
                property="pathnames" 
                value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
    </plug-in>
................
</struts-config>


Для отображения ошибок на странице можно воспользоваться кодом на jsp:
Код

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:messagesPresent>
    <table>
        <tr>
         <td colspan="3">
                <html:errors footer="errors.footer" 
                        header="errors.header" 
                        prefix="errors.prefix" 
                        suffix="errors.suffix"/>
            </td>
        </tr>
    </table>
</logic:messagesPresent>

<logic:messagesPresent message="true">
    <table>
        <tr>
         <td colspan="3">
                <html:messages id="message" message="true" 
                        footer="messages.footer" 
                        header="messages.header">
                    <div>
                 <bean:message key="messages.prefix"/>
                 <bean:write name="message"/>
                 <bean:message key="messages.suffix"/>
                 </div>
                </html:messages>
            </td>
        </tr>
    </table>
</logic:messagesPresent>

значение "errors.***" и "messages.***" хранятся в файле свойств, там же хранятся и значения ошибок (те, котоыре закомментины в файле правил валидации).

И последнее - настройка формы на проверку на странице:
Код

..............................
<html:form action="authorize" focus="username" 
                        onsubmit="return validateAuthorizedForm(this);">
                    <table>
                        <tr >
                            <th colspan="2" class="authorize">
                                <bean:message key="authorize.formName"/>
                            </th>
                        </tr>
                        <tr>
                            <th colspan="2">&nbsp;</th>
                        </tr>
                        <tr>
                            <th>
                                <bean:message key="authorize.userName"/>
                            </th>
                             <td align="left">
                                   <html:text property="username" 
                                           size="16" maxlength="18"/>
                             </td>
                        </tr>
                        <tr>
                             <td align="right">
                                 <html:submit>
                                       <bean:message key="button.submit"/>
                                   </html:submit>
                             </td>
                             <td align="left">
                                   <html:reset>
                                     <bean:message key="button.reset"/>
                                   </html:reset>
                             </td>
                        </tr>
                    </table>
                </html:form>
...........................


А для подключения проверки на стороне клиента, т.е. через java-script, в конце всего-то написать:
Код


<html:javascript formName="authorizedForm"/>


и о-ля-ля - все готово.
В общем более подробно смотри ссылку, которую я указала выше smile




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)