struts2验证框架在客户端不起作用

时间:2011-10-20 01:55:36

标签: validation struts2 client-side

我正在使用struts2验证框架来验证客户端中的数据。 我已经阅读了很多验证框架教程,但仍然无法找到我犯错的地方。

我使用Struts 2.2.3。 struts.xml配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
  <constant name="struts.devMode" value="true" />

  <package name="admin" namespace="/" extends="struts-default">
    <default-action-ref name="index" />

    <global-results>
      <result name="error">/error.jsp</result>
    </global-results>

    <global-exception-mappings>
      <exception-mapping exception="java.lang.Exception" result="error" />
    </global-exception-mappings>

    <action name="login" class="com.text.LoginAction">
      <result name="login">/login_page.jsp</result>
      <result name="success">/login_success.jsp</result>
      <result name="error">/login_page.jsp</result>
    </action>
  </package>
</struts>

在index.jsp中,我转到struts2动作并进入登录页面。

<body>
  <a href="login!handle.action">Go to Login Page</a>
</body>

login_page.jsp

<body>
  <s:form action="login!login.action" validate="true" method="post">
    <s:textfield name="username" label="Username"/>
    <s:textfield name="password" label="Password"/>
    <s:submit value="Submit"/>
  </s:form>
</body>

LoginAction,@ SkipValidation注释用于跳过特定方法的验证

public class LoginAction extends ActionSupport {

    private static final long serialVersionUID = 1L;

    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 String login() {
        if (username.equalsIgnoreCase("root") && password.equalsIgnoreCase("1234")) {
            return "success";
        } else {
            return "fail";
        }
    }

    @SkipValidation
    public String handle() {
        return "login";
    }
}

使用LoginAction的同一个包中的LoginAction-validation.xml。

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
     "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
  <field name="username">  
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>Login name is required</message>  
    </field-validator>
  </field>

  <field name="password">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>Password is required</message>
    </field-validator>
  </field>  
</validators>

在s:form中添加validate =“true”后,我转到页面并尝试访问validation.js和utils.js。他们原来是apache tomcat错误报告文件。我认为这意味着客户端验证不起作用。任何人都可以帮我修复它吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

通过映射到.action,而不是S2 web.xml docs中记录的通配符,阻止S2提供所需的JavaScript文件。

您可以提取S2通常自己提供的静态文件,或者更正您的映射。