Validation 如何在用户提交了某些内容时验证表单(使用Struts2)

Validation 如何在用户提交了某些内容时验证表单(使用Struts2),validation,struts2,Validation,Struts2,我正在开发一个非常简单的Struts2应用程序,我发现了一个奇怪的问题(我相信很容易解决): 当我访问directoly登录url时,它会显示带有以下错误的登录表单(用户名和密码文本字段): Name field is required Password is required 该字段为空,因为这是用户第一次进入,所以我想告诉Struts2验证系统不要验证,除非用户提交带有用户名和密码的登录表单。我肯定我忽略了什么或者忘记了什么 Login.java操作代码: package actions.

我正在开发一个非常简单的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>


真的
需要登录名
真的
密码是必需的

任何形式的帮助都将不胜感激。 提前感谢。

您需要两个操作

  • 您的登录操作将重定向到Login.jsp

  • 处理登录过程的LoginSubmit操作

  • 对于第二个,您可以定义验证。

    您需要两个操作

    <welcome-file-list>
        <welcome-file>Login.jsp</welcome-file>
    </welcome-file-list>
    
  • 您的登录操作将重定向到Login.jsp

  • 处理登录过程的LoginSubmit操作


  • 对于第二个,您可以定义验证。

    您需要一个重定向到login.jsp的操作和另一个处理登录过程和验证的操作。
    <welcome-file-list>
        <welcome-file>Login.jsp</welcome-file>
    </welcome-file-list>
    
    在第一个动作中,不要写任何东西,只需设置result=success

    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>
    
    
    /页面/login.jsp
    /pages/welcome.jsp
    /页面/login.jsp
    
    您需要一个操作重定向到login.jsp,另一个操作处理登录过程和验证。 在第一个动作中,不要写任何东西,只需设置result=success

    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>
    
    
    /页面/login.jsp
    /pages/welcome.jsp
    /页面/login.jsp
    
    避免此问题的一种方法是,在web.xml文件中有一个欢迎文件列表条目。这应该指向您的登录页面。一旦你启动你的应用程序,这个登录页面就会打开,不需要做任何动作和验证

    <welcome-file-list>
        <welcome-file>Login.jsp</welcome-file>
    </welcome-file-list>
    
    
    Login.jsp
    
    启动服务器后,您可以通过以下格式提供url来访问应用程序

    “”
    此处8080-是默认的HTTP端口,在您的情况下可能会有所不同。
    ApplicationContext-是应用程序的上下文


    我认为其他方法也可以。避免这个问题的一个方法是,在web.xml文件中有一个欢迎文件列表条目。这应该指向您的登录页面。一旦你启动你的应用程序,这个登录页面就会打开,不需要做任何动作和验证

    <welcome-file-list>
        <welcome-file>Login.jsp</welcome-file>
    </welcome-file-list>
    
    
    Login.jsp
    
    启动服务器后,您可以通过以下格式提供url来访问应用程序

    “”
    此处8080-是默认的HTTP端口,在您的情况下可能会有所不同。
    ApplicationContext-是应用程序的上下文


    我认为其他方法应该可以很好地工作。

    您需要的是使用相同的操作来显示表单,然后(提交后)处理表单

    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()
    方法)。您不需要使用两个操作来执行此操作。

    您需要的是使用相同的操作来显示表单,然后(提交后)处理表单

    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()
    方法)。您不需要使用两个操作。

    您不需要两个操作,使用两个操作会添加不必要的代码。您不需要两个操作,使用两个操作会添加不必要的代码。使用两个操作会添加不必要的代码,并且无法很好地扩展。每次需要处理表单时,您都会得到2个action类。啊!使用两个动作会添加不必要的代码,并且不能很好地扩展。每次需要处理表单时,您都会得到2个action类。啊!