Как проверить форму, только если пользователь отправил что-то (с Struts2) - PullRequest
1 голос
/ 12 сентября 2010

Я разрабатываю очень простое приложение Struts2, и у меня возникает эта странная (и легко решаемая, я уверен) проблема:

Когда я обращаюсь к directoly по URL-адресу входа, отображается форма входа в систему (текстовые поля имени пользователя и пароля) с этими ошибками:

Name field is required
Password is required

Поле пустое, потому что пользователь попадает в него впервые, поэтому я бы сказал системе проверки Struts2 не проверять, еслиПользователь отправляет форму входа с именем пользователя и паролем.Я уверен, что я что-то пропускаю или забываю.

Код действия Login.java:

package actions.access;

import actions.base.BaseAction;
import data.Webuser;

public class Login extends BaseAction {

    private Webuser user;

    public String execute() {
        if (user != null) {
            session = this.getSession();
            if (session.get("user-logged") == null ) {
                session.put("user-logged", user.getId());
            }
        }
        return SUCCESS;
    }

    public void validate() {
        if (user != null) {
            Webuser realUser = services.getWebuserByNickname(user.getNickname());
            if (realUser.getPass().equals(user.getPass())) {
                user.setId(realUser.getId());
            } else {
                addFieldError("user.nickname", "Nickname or password are wrong");
            }
        }
    }

    public Webuser getUser() {
        return user;
    }


    public void setUser(Webuser user) {
        this.user = user;
    }

}

Код Login-validation.xml:

<field name="user.nickname">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>Login name is required</message>
    </field-validator>
</field>

<field name="user.pass">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>Password is required</message>
    </field-validator>
</field>

Любая помощь будет оценена.Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 06 февраля 2011

То, что вы ищете, - это использовать то же действие для отображения формы, а затем (после отправки) обработать форму.

public class LoginAction {
    @SkipValidation
    public String execute() throws Exception {
        return INPUT; // shows the form
    }

    public void validate() {
        // do your validations here...
    }

    public String submit() throws Exception {
        // process the form
        // redirect somewhere
    }
}

Ваша форма должна быть отправлена ​​в «login! Submit» (это динамический вызов метода, который вызывает ваш submit() метод). Вам не нужно использовать два действия для этого.

0 голосов
/ 14 сентября 2010

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

public class IndexAction extends ActionSupport
{


   public String execute() throws Exception
   {
      return SUCCESS;
   }
}

Записи в Struts.xml выглядят следующим образом:

<action name="login" class="com.test.web.LoginAction">
<result name="input">/pages/login.jsp</result>
    <result name="success" >/pages/welcome.jsp</result>    
</action>
<action name="index" class="com.test.web.IndexAction">
    <result name="success">/pages/login.jsp</result>
</action>
0 голосов
/ 16 сентября 2010

Один из способов избежать этой проблемы заключается в том, что в вашем файле web.xml есть запись для списка файлов приветствия.Это должно указывать на вашу страницу входа.Как только вы запустите ваше приложение, эта страница входа откроется без каких-либо действий и проверки.

<welcome-file-list>
    <welcome-file>Login.jsp</welcome-file>
</welcome-file-list>

После запуска вашего сервера вы можете получить доступ к вашему приложению, указав URL в формате ниже

"http://localhost:8080/ApplicationContext"
Здесь 8080 - это порт HTTP по умолчанию, в вашем случае он может быть другим.
ApplicationContext - это контекст вашего приложения.

Я думаю, что другое должно работать нормально.

0 голосов
/ 12 сентября 2010

вам нужно два действия.

  1. Ваше действие входа, которое перенаправляет на ваш login.jsp.

  2. Действие LoginSubmit, которое обрабатывает вход в системуПроцесс.

для второго вы можете определить свою проверку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...