我正在使用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错误报告文件。我认为这意味着客户端验证不起作用。任何人都可以帮我修复它吗?提前谢谢。
答案 0 :(得分:1)
通过映射到.action,而不是S2 web.xml docs中记录的通配符,阻止S2提供所需的JavaScript文件。
您可以提取S2通常自己提供的静态文件,或者更正您的映射。