猿教程 Logo

struts2自定义验证器

我们可以在struts 2中定义我们自己的验证逻辑(定制验证),方法是在action类中实现Validateable接口。

工作流拦截器用于获取有关action类中定义的错误消息的信息。


工作流拦截器

工作流拦截器检查是否存在任何验证错误。 它不执行任何验证。

当action类实现Validateable接口时,它会被应用。 输入是此拦截器的默认参数,用于确定要为操作或字段错误调用的结果。

它在defaultStack中找到,所以我们不需要明确定义它。

工作流拦截器的参数

工作流拦截器定义了一个参数。

参数描述
inputResultName指定如果找到字段错误或操作错误,返回的结果名称。 它默认被设置为input。

Validateabale 接口

必须实现Validateabale接口才能在action类中执行验证逻辑。 它只包含一个方法validate(),它必须在action类中被覆盖以定义验证逻辑。 验证方法的签名是:

public void validate();

ValidationAware接口

ValidationAware接口可以接受字段级别或action类级错误消息。 字段级消息保存在Map中,Action类消息保存在集合中。 它应该由action类来实现,以添加任何错误消息。


ValidatationAware接口的方法

ValidationAware接口的方法如下:

方法描述
void addFieldError(String fieldName,String errorMessage)添加指定字段的错误消息。
void addActionError(String errorMessage)为此操作添加一个Action级错误消息。
void addActionMessage(String message)为此操作添加一个Action级消息。
void setFieldErrors(Map<String,List<String>> map)设置字段的错误消息集合。
void setActionErrors(Collection<String> errorMessages)设置此操作的错误消息的集合。
void setActionMessages(Collection<String> messages)设置此操作的消息集合。
boolean hasErrors()检查是否有任何字段或操作错误。
boolean hasFieldErrors()检查是否有任何字段错误。
boolean hasActionErrors()检查是否有任何操作级错误消息。
boolean hasActionMessages()检查是否有任何Action级消息。
Map<String,List<String>> getFieldErrors()返回所有的字段级错误消息。
Collection<String> getActionErrors()返回所有Action级别的错误消息。
Collection<String> getActionMessages()返回所有Action级消息。

注意:ActionSupport类实现了Validateable和ValidationAware接口,因此我们可以继承ActionSupport类来定义验证逻辑和错误消息。


执行自定义验证的步骤

步骤如下:

  1. 创建表单以从用户获取输入

  2. 通过扩展ActionSupport类并覆盖validate方法来定义action类中的验证逻辑

  3. 通过struts.xml文件中的名称输入来定义错误消息的结果


执行自定义验证的示例

在这个例子中,我们创建了4页:

  1. index.jsp用于从用户输入。
  2. RegisterAction.java用于定义验证逻辑。
  3. 用于定义结果和操作的struts.xml。
  4. welcome.jsp为视图组件。

1)创建index.jsp进行输入

这个jsp页面使用struts UI标签创建一个表单。 它从用户那里接收名称,密码和电子邮件ID。

index.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>
<s:form action="register">
<s:textfield name="name" label="Name"></s:textfield>
<s:password name="password" label="Password"></s:password>
<s:submit value="register"></s:submit>
</s:form>

2)创建动作类

此操作类继承ActionSupport类,并覆盖validate方法来定义验证逻辑。

RegisterAction.java

package com.javatpoint;
import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport{
private String name,password;
public void validate() {
	if(name.length()<1)
		addFieldError("name","Name can't be blank");
	if(password.length()<6)
		addFieldError("password","Password must be greater than 5");
}

//getters and setters

public String execute(){
//perform business logic here
	return "success";
}
}

3)在struts.xml中定义输入结果

这个xml文件通过名称输入定义了一个额外的结果,如果在action类中找到任何错误消息,将会被调用。

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>

<package name="default" extends="struts-default">
<action name="register" class="com.javatpoint.RegisterAction">
<result>welcome.jsp</result>
<result name="input">index.jsp</result>
</action>
</package>
</struts>

4)创建视图组件

它是显示用户信息的简单jsp文件。

welcome.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>
Name:<s:property value="name"/><br/>
Password:<s:property value="password"/><br/>

输出




定义action级错误消息

action级错误消息适用于整个表单。 我们可以通过validate()方法中的ValidationAware接口的addActionError()方法来定义action级错误消息。 例如:

package com.javatpoint;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport{
private String name,password,email;
public void validate() {
	if(name.trim().length()<1 || password.trim().length()<1){
		addActionError("Fields can't be blank");
	}
}

//getters and setters

public String execute(){
	return "success";
}
}

现在,您需要在index.jsp文件中使用actionerror标签来显示操作级错误消息。

index.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>
<s:actionerror/>
<s:form action="register">
<s:textfield name="name" label="Name"></s:textfield>
<s:password name="password" label="Password"></s:password>
<s:textfield name="email" label="Email Id"></s:textfield>
<s:submit value="register"></s:submit>
</s:form>

输出




版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Struts/struts-2-custom-validation-workflow-interceptor.html