【问题标题】:Struts validation doesn't work properlyStruts 验证无法正常工作
【发布时间】:2014-09-25 21:36:24
【问题描述】:

我有一个用于验证 jsp 中某些字段的操作。如果此操作返回输入,则会添加相应的字段错误。但是在更正字段并重新提交表格后,这个不会重新提交;即使所有字段都正确,字段错误仍将保持附加。

图一:

我已经提交了带有空姓氏字段的表单。添加了适当的字段错误。

图二:

然后我已经填写了姓氏空白,但是错误消息被卡住并且表格不会重新提交。

验证:

public String validateForm() {
    if (name == null || name.equals("")) {
        addFieldError("name", "Name is required!");
        return INPUT;
    }

    if (surname == null || surname.equals("")) {
        addFieldError("surname", "Surname is required!");
        return INPUT;
    }

    if (username == null || username.equals("")) {
        addFieldError("username", "Username is required!");
        return INPUT;
    }

    if (password == null || password.equals("")) {
        addFieldError("password", "Password is required!");
        return INPUT;
    }

    if (!passwordCheck.equals(password)) {
        addFieldError("password", "Passwords do not match!");
        addFieldError("passwordCheck", "");
        return INPUT;
    } else {
        return SUCCESS;
    }
}

Struts.xml:

<package name="actions" namespace="/authenticated/admin" extends="struts-default">

    <action name="form">
        <result>/authenticated/admin/inputAccountSave.jsp</result>
    </action>

    <action name="register" class="AccountAction" method="createAccount">
        <result name="success">/success.jsp</result>
        <result name="input">/authenticated/admin/inputAccountSave.jsp
        </result>
    </action>

</package>


<package name="validations" extends="struts-default">

    <action name="validate" class="AccountAction" method="validateForm">
        <result name="success" type="redirectAction">
            <param name="actionName">register</param>
            <param name="name">${name}</param>
            <param name="surname">${surname}</param>
            <param name="username">${username}</param>
            <param name="password">${password}</param>
            <param name="role">${role}</param>
        </result>
        <result name="input">/authenticated/admin/inputAccountSave.jsp
        </result>
    </action>

</package>

表格:

<s:form name="register" action="validate" >
    <s:textfield name="name" label="Name" />
    <s:textfield name="surname" label="Surname" />
    <s:textfield name="username" label="Username" />
    <s:password name="password" label="Password" />
    <s:password name="passwordCheck" label="Confirm password" />
    <s:select name="role" label="Role" list="{'MANAGER', 'ADMIN'}"></s:select>
    <s:submit />
</s:form>

谢谢

【问题讨论】:

    标签: java forms jsp validation struts2


    【解决方案1】:

    首先,您不需要从 validate 返回 INPUT,添加 fieldError 就足以指示 Workflow Interceptor 自动返回 INPUT。

    其次,您的方法、操作和表单的命名过于复杂,并且可能具有误导性……请尽量让事情变得更简单,以备将来使用。

    第三:您正在 Action 方法中进行验证。这不是它的工作原理。 action 方法(默认为execute(),但它可以是任何东西,并且您已将其命名为validateForm())必须处理Action 的业务,而不是验证。验证由(XML、Annotations 或)validate() 方法处理,该方法由 Validation Interceptor 调用,并在达到操作之前执行。如果验证失败,action方法将不会被执行,请求将被重定向回定义为INPUT的结果。

    如果您有兴趣,请阅读the detailed flow 的更多信息。

    那么在你的情况下:

    public String validateForm() {        
        return SUCCESS;
    }
    
    public void validate() {
        if (name == null || name.equals("")) {
            addFieldError("name", "Name is required!");            
        }
    
        if (surname == null || surname.equals("")) {
            addFieldError("surname", "Surname is required!");
        }
    
        if (username == null || username.equals("")) {
            addFieldError("username", "Username is required!");
        }
    
        if (password == null || password.equals("")) {
            addFieldError("password", "Password is required!");
        }
    
        if (!passwordCheck.equals(password)) {
            addFieldError("password", "Passwords do not match!");
            addFieldError("passwordCheck", "");
        } 
    }
    

    但是为了您自己的安全,请尽快更改方法/操作名称:)

    【讨论】:

    • @Vladislav 你试过了吗?有效果吗?如果有帮助,请记得点赞/接受答案,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2013-09-22
    相关资源
    最近更新 更多