Невозможно выйти за пределы подкласса ActionForm - PullRequest
0 голосов
/ 18 марта 2011

У меня есть простое веб-приложение:

Оно имеет простую страницу входа с именем пользователя и паролем.

Я создал подкласс ActionForm с именем LoginForm:

public class LoginForm extends ActionForm 
{
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
    {
        ActionErrors errors=new ActionErrors();

        System.out.println("In LoginForm");

        if(username.equals(""))
        {
            errors.add("username",new ActionMessage("loginerror.usernameEmpty"));
        }
        else if(password.equals(""))
        {
            errors.add("password",new ActionMessage("loginerror.passwordEmpty"));
        }

        return errors;
    }

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

}

И подкласс Action: LoginAction

public class LoginAction extends Action
{
    public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServlet response)
    {
        LoginForm loginform=(LoginForm)form;

        String username=loginform.getUsername();
        String password=loginform.getPassword();

        System.out.println("Username="+username+" & Password="+password);

        if(username.equals("lokesh"))
        {
            ActionMessages errors=new ActionMessages();

            errors.add("username",new ActionMessage("loginerror.usernameInvalid"));

            saveErrors(request,errors);

            return mapping.getInputForward();

        }

        return mapping.findForward("success");
    }

}

Отображение действий Struts:

 <action-mappings>
        <action path="/login" type="occ.controller.LoginAction" name="LoginForm" scope="request" validate="true" input="/index.jsp"  >
            <forward name="success" path="/index.jsp" />
        </action>
    </action-mappings>

Теперь проверка ActionForm идет идеально, но комплексная проверка, выполненная в LoginAction, не работает.

Страница просто становится пустой.

[Я специально исключил импорт]

1 Ответ

0 голосов
/ 18 марта 2011

Вы должны расширить свой класс формы (LoginForm) из org.apache.struts.validator.ValidatorForm (не ActionForm).Я рекомендую вам использовать встроенную функцию проверки Struts.Этот URL может помочь вам: http://struts.apache.org/1.2.4/userGuide/dev_validator.html. Используя его, вам не нужно писать код Java для проверки общих (и сложных) правил.

...