关于如何自定义Struts2表单验证后的错误信息显示格式【基于声明式验证】

网上关于很多通过修改template主题为simple达到最后的效果,但是多数是直接通过硬编码的方式去验证【即编程式验证】,这里就自己是怎么通过声明式验证去达到格式优化的效果的,可能代码比较low,希望大家见谅。

首先是动作类以及登陆的jsp页面:【StudentAction.java】【login.jsp】

public class StudentAction extends ActionSupport implements ModelDriven<Student> {
	private Student student = new Student(); 

	@Override
	public Student getModel() {
		return student;
	}
	
	public String loginStu() {
		return "success";
	}

}

这里还必须改主题,两种方式,一种通过struts.xml修改,这里采用另一种直接在<s:form>上面添加theme属性即可 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<s:form action="action3.action" theme="simple">
		用户名:<s:textfield name="username" label="用户名" />
		<span style="color:red"><s:fielderror>
			<s:param>username</s:param>
		</s:fielderror>
		</span>
		<br />
		年龄:<s:textfield name="age" label="年龄" />
		<span style="color:red"><s:fielderror>
			<s:param>age</s:param>
		</s:fielderror>
		</span>
		<br />
		邮箱:<s:textfield name="email" label="邮箱" />
		<span style="color:red"><s:fielderror>
			<s:param>email</s:param>
		</s:fielderror>
		</span>
		<br />
		密码:<s:textfield name="password" label="密码" />
		<span style="color:red"><s:fielderror>
			<s:param>password</s:param>
		</s:fielderror>
		</span>
		<br />
		确认密码:<s:textfield name="repassword" label="确认密码" />
		<span style="color:red"><s:actionerror /></span>
		<br />
		成绩:<s:textfield name="score" label="成绩" />
		<span style="color:red"><s:fielderror>
			<s:param>score</s:param>
		</s:fielderror>
		</span>
		<br />
		个人主页:<s:textfield name="url" label="个人主页" />
		<span style="color:red"><s:fielderror>
			<s:param>url</s:param>
		</s:fielderror>
		</span>
		<br />
		性别:<s:radio list="{'男','女'}" name="gender" label="性别" />
		<span style="color:red"><s:fielderror>
			<s:param>gender</s:param>
		</s:fielderror>
		</span>
		<br />
		<s:submit value="提交" />
	</s:form>
</body>
</html>

上图只是为了达到效果,可能还有更简便的方式,但是我这里就不试验了,对了,说一下之所以加上<span>标签是因为我在

<s:fielderror>这个标签中添加cssStyle不起作用。

接下来是声明式验证的xml文件代码:【StudentAction-action3-validation.xml】这个文件一定要放在和动作类一个路径下面

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
	<field name="username">
		<field-validator type="requiredstring">
			<message>请输入用户名</message>
		</field-validator>
	</field>

	<field name="age">
		<field-validator type="int">
			<param name="min">18</param>
			<param name="max">100</param>
			<message>请输入18-100之间的整数</message>
		</field-validator>
	</field>

	<field name="email">
		<field-validator type="email">
			<message>请输入正确的邮箱格式</message>
		</field-validator>
	</field>

	<field name="password">
		<field-validator type="requiredstring">
			<!-- 注入取消使用trim -->
			<param name="trim">false</param>
			<message>请输入密码</message>
		</field-validator>
		<field-validator type="stringlength">
			<param name="minLength">3</param>
			<param name="maxLength">8</param>
			<message>密码长度是3~8位的</message>
		</field-validator>
	</field>

	<!-- 确认密码和密码必须保持一致,是2个字段的事,所以要使用基于验证器的声明方式 -->
	<validator type="expression">
		<param name="expression">
			<![CDATA[
				password == repassword
			]]>
		</param>
		<message>两次密码必须一致</message>
	</validator>

	<field name="score">
		<field-validator type="regex">
			<param name="regex">
				\d+
			</param>
			<message>请输出正确的成绩</message>
		</field-validator>
	</field>

	<field name="url">
		<field-validator type="url">
			<message>请输入正确的url地址</message>
		</field-validator>
	</field>

	<field name="gender">
		<!-- required是一个只验证是否null的内置验证器,不会去除空格 -->
		<field-validator type="required">
			<message>请选择性别</message>
		</field-validator>
	</field>
</validators>

 这里只是为了实现效果,有些验证还需要完善,比如成绩校验等等。

接下来就是去struts2核心包拷贝这两个文件,然后建立template/simple目录,放在这里面

关于如何自定义Struts2表单验证后的错误信息显示格式【基于声明式验证】

关于如何自定义Struts2表单验证后的错误信息显示格式【基于声明式验证】

最后就是修改这两个文件内容,很简单删除里面的<ul>标签和<li>标签就行了:

【actionerror.ftl】删除红框里面的内容

 关于如何自定义Struts2表单验证后的错误信息显示格式【基于声明式验证】

【fielderror.ftl】删除红框里面的内容

关于如何自定义Struts2表单验证后的错误信息显示格式【基于声明式验证】

最后部署服务启动tomcat,得到最终的效果:

关于如何自定义Struts2表单验证后的错误信息显示格式【基于声明式验证】