Validation 在Struts 2中对同一操作中的两个方法进行验证

Validation 在Struts 2中对同一操作中的两个方法进行验证,validation,struts2,Validation,Struts2,我正在使用Struts 2进行开发,我想在同一个操作中验证两个方法(代表一个用户)。第一种是检查用户(管理员或普通用户)角色的登录方法,第二种是编辑用户: public class UserAccountAction extends AppSupport { public String login() { if (getUsername().equals("admin") && getPassword().equals("admin")) {

我正在使用Struts 2进行开发,我想在同一个操作中验证两个方法(代表一个用户)。第一种是检查
用户
(管理员或普通用户)
角色的登录方法,第二种是编辑
用户

public class UserAccountAction extends AppSupport {

    public String login() {
        if (getUsername().equals("admin") && getPassword().equals("admin")) {
            session.put("username", getUsername());
            return "adminSuccess";
        } else if (getUsername().equals("user") && getPassword().equals("user")) {
            session.put("username", getUsername());
            return "userSuccess";
        } else {
            addActionError(getText("login.failedLoginCredential"));
            return INPUT;
        }
    }

    public String editProfile {
        // ...
    }
}
为此,我创建了两个xml文件:
UserAccountAction login validation.xml

<validators>
    <field name="login">
        <field-validator type="required">
            <message key="form.required" />
        </field-validator>
    </field>

    <field name="password">
        <field-validator type="required">
            <message key="form.required" />
        </field-validator>
    </field>
</validators>
    <action name="login" method="login" class="com.project.action.UserAccountAction">
    <result name="input">/jsp/login.jsp</result>
    <result name="userSuccess" type="redirect">home.html</result>
    <result name="adminSuccess" type="redirect">admin/home.html</result>
</action>

<action name="edit_account" method="editProfile" class="com.facilityrh.action.UserAccountAction">
    <result name="input" type="tiles">userEditProfile</result>
    <result name="success" type="redirect">account.html</result>
</action>
以及
login.jsp

<s:if test="hasActionErrors()">
    <div class="error"><s:actionerror /></div>
</s:if>

<s:if test="hasActionMessages()">
    <div class="message"><s:actionmessage /></div>
</s:if>

<s:form action="login" method="post">
    <s:textfield name="login" key="login.login" /><br />
    <s:password name="password" key="login.password" /><br />
    <s:submit name="submit" key="login.submit" /> 
</s:form>



目前,在行动中,验证是基本的,但之后,我将使用数据库获取信息

问题是当我提交表单
(login或editProfile)
时,该方法不会执行,因为我没有错误,我返回相同的jsp(输入旁边没有所需的消息)


谢谢

您是否使用默认的拦截器堆栈?您是否知道
login
方法没有被执行,或者您只是假设它没有被执行?你把日志记录下来了吗?你在devMode吗?您需要XML验证工作吗?为什么要重定向到非S2资源?在MVC应用程序中,所有内容(本质上)都应该转到框架资源。我将使用2个拦截器检查用户是管理员还是用户,但目前它们返回arg0.invoke()。我试图只删除addActionError(getText(“login.failedLoginCredential”);在登录方法中,但在jsp中没有消息。我在devMode中,使用验证xml文件,在输入旁边有消息,就像它们所需要的一样。有没有其他方法可以有两种类型的重定向。您是否使用默认的拦截器堆栈?您是否知道
login
方法没有被执行,或者您只是假设它没有被执行?你有记录在案吗?XML验证有效吗?为什么要重定向到非S2资源?在MVC应用程序中,所有内容(本质上)都应该属于框架资源。换句话说,你几乎没有回答我的任何问题,我问这些问题不是为了好玩——这些问题的答案将提供解决你问题所需的信息。