一:数据转换:
1:把页面上的字符串数据类型装换成数据库中的类型 insert update delete
2:把数据库中的数据类型转换成字符串在页面上显示输出 select
Struts实现自动转换
1:基本数据类型转换。
2:本地格式的日期类型(yyyy-MM-dd)--Date
3:把string[](字符串数组)类型的转换成用“,+空格”间隔的字符串
二:自定义类型转换器
TypeConverter--DefaultTypeConverter---StrutsTypeConverter
定义好的类型转换器需要注册
1:该类型转换器只能被特定的类使用(局部的)
2:该类型转换器可以被全局使用
定义局部的文件需要写在其转换的实体类的包下,文件命名规则Javabean名称-conversion.properties
brithday=converter.MyConverter
定义全局的类型转换器,文件名必须是这个名xwork-conversion-properties文件应该写在src下
这个文件里写
java.util.Date=converter.MyConverter
三:没有自定义类型转换器时的错误处理
(如果没有写类型转化器时,输入格式错误,怎么处理:定义结果视图 input)
会报错"HTTP Status 404-No result defined for action action.UserAction and result input"
input数据回显,即回到原来注册页面,并显示原输入数据
<struts>
<package name="p1" extends="struts-default">
<action name="regist" class="com.qianfeng.web.action.UserAction" method="regist">
<result name="exists" type="redirect">/msg.jsp</result>
<result name="success">/success.jsp</result>
<result name="input">/regist.jsp</result><!-- 数据回显, 回到源来的页面 -->
</action>
</struts>
如何显示数据呢?
首先页面需要添加标签<%@ taglib uri="/struts-tags" prefix="s" %>
在boday里加入<s:fielderror/>标签
<s:fielderror/>加这个标签会在页面上方和错误输入框上边显示错误
如果想只显示输入框上的错误提示写<s:head></s:head>就可以了
<s:head></s:head>这个标签会使错误信息显示为红色
对于页面提交表单
Struts2的表单和form以及HTML的表单写法差不多
action :可以直接写动作
method:默认post
enctype:表单编码为MIME类型
<form action="${pageContext.request.contextPath}/regist.action" method="post">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
出生日期:<input type="text" name="birthday"><br/>
爱好:<input type="checkbox" name="hobby" value="吃">吃
<input type="checkbox" name="hobby" value="睡">睡
<input type="checkbox" name="hobby" value="玩">玩<br/>
已婚:<input type="checkbox" name="married" value="true"><br/>
<input type="submit" value="注册"><br/>
</form>
使用Struts2标签后的写法
<s:form action="regist.action">
<s:textfield name="username" label="用户名" requiredLabel="true" requiredPosition="left"></s:textfield>
<s:password name="password" label="密码" showPassword="true"></s:password>
<s:textfield name="birthday" label="出生日期"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
" requiredLabel="true" requiredPosition="left"
修改错误信息显示需要建立User.properties文件
invalid.field value foe field brithday=请输入正确格式“MM/dd/yyyy”
发生类型转换错误时为什么加入input就能实现回显?
拦截器conversionError实现的这个功能
注意:动作类必须继承ActionSupport
四:数据验证
客户端验证,服务器端验证
服务器端验证(d38 MVC)
1编程式验证:写代码验证:硬编码,写死了
2声明式验证:写xml文件验证
1编程式验证:重写ActionSupport中的public void validate()方法
Struts2内部封装了一个map,map的键就是表单上的“name”的值,map的值就是错误信息
注意动作类必须继承ActionSupport
默认validate()方法在所有执行动作方法之前执行
为了让不需要验证不执行validate方法,解决方式有两种:
1使用注解:@SkipValidation
2验证的方法名:validate+动作方法名(首字母要大写)
public void validate(){
if("".equals(user.getName())||user.getName()==null){
addFieldError("name","用户名不能为空")
}
}
对于是否输入为空的判断有两种方法
第一个isEmpty()是去掉左右的空格,第二个isBlank()是去掉左右外加内部的空格是否为空
public class TestDemo {
public static void main(String[] args) {
String s1 = "";
String s2=null;
String s3=" ";//trim
//判断是否为空字符串或null,不去除空格
System.out.println(StringUtils.isEmpty(s1));//true
System.out.println(StringUtils.isEmpty(s2));//true
System.out.println(StringUtils.isEmpty(s3));//false
//判断是否为空字符串或null,去除空格
System.out.println(StringUtils.isBlank(s1));//true
System.out.println(StringUtils.isBlank(s2));//true
System.out.println(StringUtils.isBlank(s3));//true
}
}
2声明式验证
在动作类所在的包下创建xml文件
文件名有命名规则:动作类+validation.xml,默认验证动作类里的所有方法
希望某些方法不被验证可以1 :加 注解:@SkipValidation
2 .xml文件名改成 动作类名-动作名-validation.xml
在xml文件中加入dtd文件(xwork.core.jar里的xwork-validator-1.0.3.dtd)
requiredstring 判断是否为null,或空字符串,去除空格
应用练习
1先建立user实体类
public class User {
private String username;
private String password;
private Date birthday;
private String hobby;
private boolean married;
2写action
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.qianfeng.domain.Student;
public class StudentAction extends ActionSupport implements ModelDriven<Student>{
private Student student = new Student();
public String addStudent()
{
return SUCCESS;
}
@Override
public Student getModel() {
return student;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
3建立stu.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<s:head></s:head>
<s:actionerror/>
<body>
<s:form action="addStudent.action">
<s:textfield name="username" label="用户名"></s:textfield>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="email" label="邮箱"></s:textfield>
<s:textfield name="password" label="密码"></s:textfield>
<s:textfield name="repassword" label="确认密码"></s:textfield>
<s:textfield name="score" label="成绩"></s:textfield>
<s:textfield name="url" label="主页"></s:textfield>
<s:radio name="gender" list="{'男','女'}" label="性别"></s:radio>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>
选择框不是用checkbox了
4建立action-addstudent-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">70</param>
<message>年齡必須在18到70之間</message>
</field-validator>
</field>
<field name="email">
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<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>
<!-- 确认密码需要和密码一致,所以使用验证器验证 -->
<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">
<field-validator type="required">
<message>请选择性别</message>
</field-validator>
</field>
</validators>
5