Struts2数据转换

一:数据转换:

 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值