Struts2数据转换

来源:互联网 发布:淘宝11.11抢拍技巧 编辑:程序博客网 时间:2024/04/27 19:26

一:数据转换:

 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));//trueSystem.out.println(StringUtils.isEmpty(s2));//trueSystem.out.println(StringUtils.isEmpty(s3));//false//判断是否为空字符串或null,去除空格System.out.println(StringUtils.isBlank(s1));//trueSystem.out.println(StringUtils.isBlank(s2));//trueSystem.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;}@Overridepublic 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
原创粉丝点击