网上关于很多通过修改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目录,放在这里面
最后就是修改这两个文件内容,很简单删除里面的<ul>标签和<li>标签就行了:
【actionerror.ftl】删除红框里面的内容
【fielderror.ftl】删除红框里面的内容
最后部署服务启动tomcat,得到最终的效果: