在具有多个操作的类中具有多个验证功能

时间:2013-08-14 03:59:14

标签: validation struts2

我想使用动作类中的验证函数验证Struts 2中的表单。

我找到了这个例子:http://www.javatpoint.com/struts-2-custom-validation-workflow-interceptor

但是,我希望在同一个类中有多个函数(动作)。我想为每个功能都有一个验证功能。我们怎么做到这一点?

编辑:

示例中的validate()函数会自动调用,因为它是Validateable接口函数之一。如果我使用其他名称验证函数,则不会调用它们

2 个答案:

答案 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>