Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Валидация в стратс 
:(
    Опции темы
FcUK
Дата 2.3.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.2.2007

Репутация: нет
Всего: 1



Привет
небольшая проблема з валидацией формы
имеется форма на jsp 

Код

<%
    User currentUser = (User)request.getAttribute("user");
%>
<html:form action="/userSave.do" >
    <fieldset class="fieldset">
        <legend>Edit User</legend>
        <label for="name">Name</label>
        <html:text property="name"  value="<%=currentUser.getName()%>"></html:text>
        
        <label for="descr">Email</label>
        <html:text  property="descr"  value="<%=currentUser.getEmail()%>"></html:text>
        <br />
                                 <label for="submit">&nbsp;</label>    
        <html:submit styleClass="fbutton" >Save</html:submit>
                                </fieldset>
</html:form>



При первой загрузке этой страници все данные для инпутов берутса из реквеста  
Код

User currentUser = (User)request.getAttribute("user");


Потом на екшене /userSave.do стоит валидация. И если она возвращает ошибки тогда страница уже не отображаетса потому что реквест умер  и нет откуда брать дание для заполнения формы.

как решить даную проблему?

ЗЫ
Использовать сессию, а не реквест для сохранения даных  в даной апликухе (по соображениям бизнес логики) не возможно
PM MAIL   Вверх
zone51
Дата 3.3.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



FcUK, 
А у тебя валидация в Action или ActionForm?

Как я делал:
Есть форма
Код

<c:form action="/Input"  >
    <table align=center border=1>
        <tr>
            <td>
               <b>Введите ваш логин</b>
            </td>
               <td><c:text name="loginFormBean" property="login" />
            </td>
        </tr>
        <tr>
            <td>
               <b>Введите ваш пароль</b>
            </td>
            <td>
               <c:text property="pass" name="loginFormBean" />
            </td>
        </tr>
        <tr>
            <td colspan=2 align=center>
                <c:submit value="Вход" />
            </td>
        </tr>
    </table>
  </c:form>


Для нее есть FormBean

Код

public class loginFormBean extends ValidatorForm {

    private String login=null;
    private String pass=null;

    public loginFormBean(){
        super();
    }

    public void reset(ActionMapping mapping, HttpServletRequest request){
        this.login=null;
        this.pass=null;
    }

    public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
        ActionErrors errors = new ActionErrors();
        if(login==null || login.length()<1)errors.add("login",new ActionMessage("errors.login.required"));
        if(pass==null || pass.length()<1)errors.add("login",new ActionMessage("errors.pass.required"));
        return (errors);
    }

    public String getLogin(){
        return login;
    }

    public String getPass(){
        return pass;
    }

    public void setLogin(String l){
        this.login=l;
    }

    public void setPass(String p){
        this.pass=p;
    }
}


И фрагмент в struts-config:

Код

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


И еще

Код

<action
            path="/Input"
            type="login"
            name="loginFormBean"
            scope="session"
            validate="true"
            >
            <forward name="success" path="/index.jsp" />
            <forward name="error" path="/error.jsp" />
        </action>   


И соответственно validator.xml

Код

 <formset>
        <form name="loginFormBean">
            <field
                property="login"
                depends="required">
                    <arg key="loginFormBean.login"/>
            </field>
            <field
                property="pass"
                depends="required,mask">
                    <arg key="loginFormBean.pass"/>
                    <var>
                        <var-name>mask</var-name>
                        <var-value>^[0-9a-zA-Z]*$</var-value>
                    </var>
            </field>
        </form>
    </formset>


Самое главное тут это указывать в маппинге validate="true"
включить плагин в маппинге и подредактировать валидатор. Это по крайней  мере то что мне удалось нарыть в нете. НО и эта схема не пашет. Есть вопросы относительно

Код

 if(login==null || login.length()<1)errors.add("login",new ActionMessage("errors.login.required"));
 if(pass==null || pass.length()<1)errors.add("login",new ActionMessage("errors.pass.required"));


Что это и как работает. Может быть из за него косяк. Чувствую файлик свойств там должен быть  smile 

2ALL
В общем если не трудно, надо разрулить этот вопрос, ибо актуально. Заранее спасибо. smile  smile 


--------------------
The truth is out there
PM MAIL   Вверх
Greg
Дата 4.3.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: 5
Всего: 7



Обычно это делается так:
Код

<%
    User currentUser = (User)request.getAttribute("user");
    if (currentUser == null) {
          currentUser = new User();
    }
%>


Цитата(zone51 @  3.3.2007,  17:34 Найти цитируемый пост)
Что это и как работает. Может быть из за него косяк. Чувствую файлик свойств там должен быть

В struts-config.xml нужно дописать:
Код

<message-resources parameter="resources.Application" />

Это значит,что в CLASSPATH должен быть как минимум файл с относительным путём resources/Application.properties.

--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
Scarlett
Дата 28.9.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 14.12.2006

Репутация: 1
Всего: 1



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

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

Всего-то нужно подключить библиотеку - в 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




PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.