我想使用动作类中的验证函数验证Struts 2中的表单。
我找到了这个例子:http://www.javatpoint.com/struts-2-custom-validation-workflow-interceptor
但是,我希望在同一个类中有多个函数(动作)。我想为每个功能都有一个验证功能。我们怎么做到这一点?
编辑:
示例中的validate()
函数会自动调用,因为它是Validateable
接口函数之一。如果我使用其他名称验证函数,则不会调用它们
答案 0 :(得分:6)
创建validateXxx
方法,其中Xxx
是相关操作方法的名称。
(这是否是最佳选择取决于您需要的特定验证。)
答案 1 :(得分:2)
使用XML验证文件进行验证
XML验证文件的命名约定应该是ActionClass-Validation.xml。这里我们的Action Class名称是“Login.java”,XML验证文件名是“Login-Validation.xml”。
Login-Validation.xml文件包含以下代码。 查看源 打印?
<validators>
<field name="userName">
<field-validator type="requiredstring">
<message>User Name is required.</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message key="password.required" />
</field-validator>
</field>
</validators>
field元素包含需要验证的表单属性的名称。 field元素中的filed-validator元素包含需要执行的验证类型。
您可以在此处使用message元素直接指定错误消息,也可以使用属性文件定义所有错误消息,并使用key属性指定错误键。
请注意,属性文件也应与Action类同名。
Login Action类包含以下代码。 查看源 打印?
public class Login extends ActionSupport {
private String userName;
private String password;
public Login() {
}
public String execute() {
return SUCCESS;
}
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;
}
}
login.jsp页面包含以下代码。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Page</title>
<s:head />
</head>
<body>
<s:form action="LoginAction">
<s:textfield name="userName" label="User Name" />
<s:password name="password" label="Password" />
<s:submit value="Login" />
</s:form>
</body>
</html>