struts2.0(10-20)

来源:互联网 发布:下载软件删不掉怎么办 编辑:程序博客网 时间:2024/06/09 14:50

       @Override

       public Object convertFromString(Map context, String[] values, Class toClass) {

              Point point = new Point();

              String[] paramValues = values[0].split(",");

 

              int x = Integer.parseInt(paramValues[0]);

              int y = Integer.parseInt(paramValues[1]);

 

              point.setX(x);

              point.setY(y);

 

              return point;

       }

 

       @Override

       public String convertToString(Map context, Object o) {

             

              Point point = (Point)o;

              int x = point.getX();

              int y = point.getY();

 

              String result = "[x=" + x + ", y=" + y + "]";

 

              return result;

       }

 

}

 

 

xwork-conversion.properties

 

//所有的Point类都通过converter.PointConverter来转化

 

com.test.bean.Point=com.test.converter.PointConverter2

 

 

 

集合类型转换

 

PointAction

 

public class PointAction extends ActionSupport {

   

    private List<Point> point;

public List<Point> getPoint() {

       return point;

    }

    public void setPoint(List<Point> point) {

       this.point = point;

    }

 

输入页面:

 

<h3>使用逗号将点的两个坐标分割开</h3>

    <s:form action = "pointConverter">

    <s:textfield name ="point" label = "point"/>

    <s:textfield name ="point" label = "point2"/>

    <s:textfield name ="point" label = "point3"/>

 

PointConverter3转化类

 

package com.test.converter;

 

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

 

import org.apache.struts2.util.StrutsTypeConverter;

 

import com.test.bean.Point;

 

public class PointConverter3 extends StrutsTypeConverter {

 

    @Override

    public Object convertFromString(Map context, String[] values, Class toClass) {

 

       List<Point> list = new ArrayList<Point>();

 

       for (String value : values) {

           Point point = new Point();

           String[] paramValues = value.split(",");

           int x = Integer.parseInt(paramValues[0]);

           int y = Integer.parseInt(paramValues[1]);

           point.setX(x);

           point.setY(y);

          

           list.add(point);

 

       }

 

       return list;

    }

 

    @Override

    public String convertToString(Map context, Object o) {

 

       List<Point> list = (List<Point>) o;

 

       StringBuilder sb = new StringBuilder();

       sb.append("[");

       int number = 0;

 

       for (Point point : list) {

           

           ++number;

          

           int x = point.getX();

           int y = point.getY();

 

           sb.append(number).append("x = ").append(x).append(" , y = ").append(y).append(" ");

       }

       sb.append("]");

       return sb.toString();

    }

 

}

 

输出问件:

  point:<s:property value = "point"/><br>

 

 

xwork-conversion.properties文件

 

//所有的Point类都通过converter.PointConverter来转化

 

com.test.bean.Point=com.test.converter.PointConverter3

 

 

转换的另一种形式

 

输入页面

 

    <s:form action = "pointConverter">

    <s:textfield name ="point.x" label = "x"/>

    <s:textfield name ="point.y" label = "y"/>

 

PointAction

 

private Point point;

 

public void setPoint(Point point) {

       this.point = point;

    }

    public Point getPoint() {

       return point;

    }

 

去掉注释文件

 

输出文件

  point:<s:property value = "point"/><br>

 

会调用Pointtostring方法

 

package com.test.bean;

 

public class Point {

   

    private int x;

    private int y;

   

    GET Set 的复写

    @Override

    public String toString() {

       // TODO Auto-generated method stub

       return "x="+x+", y="+y;

    }

 

}

 

以上方式必须提供一个没有参数的Point构造方法

 

 

Struts2校验

 

页面端Register.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <title>My JSP 'register.jsp' starting page</title>

    </head>

 

    <body>

       <table align="center" width="40%">

           <tr>

              <td style="color: red">

                  <s:fielderror></s:fielderror>

              </td>

           </tr>

       </table>

       <form action="register.action" method="post">

 

           <table align="center" width="40%" border="1">

              <tr>

                  <td>

                     username

                  </td>

                  <td>

                     <input type="text" name="username"

                         value="${requestScope.username}">

                  </td>

              </tr>

              <tr>

                  <td>

                     password

                  </td>

 

                  <td>

                     <input type="password" name="password">

                  </td>

              </tr>

              <tr>

                  <td>

                     re-password

                  </td>

 

                  <td>

                     <input type="password" name="repassword">

                  </td>

              </tr>

              <tr>

                  <td>

                     age

                  </td>

 

                  <td>

                     <input type="text" name="age">

                  </td>

              </tr>

 

              <tr>

                  <td>

                     birthday

                  </td>

 

                  <td>

                     <input type="text" name="birthday">

                  </td>

              </tr>

 

              <tr>

                  <td>

                     graduation

                  </td>

 

                  <td>

                     <input type="text" name="graduation">

                  </td>

              </tr>

 

              <tr>

                  <td>

                     <input type="submit" value=" submit ">

                  </td>

 

                  <td>

                     <input type="reset" value=" reset ">

                  </td>

              </tr>

           </table>

       </form>

    </body>

</html>

 

RegisterAction

 

public class RegisterAction extends ActionSupport

{

    private String username;

 

    private String password;

 

    private String repassword;

 

    private int age;

 

    private Date birthday;

 

    private Date graduation;

 

GET Set 的复写

 

public String test() throws Exception

    {

       return SUCCESS;

    }

 

Struts.xml配置

 

<action name="register" class="com.test.action.RegisterAction">

           <result name="success">/success.jsp</result>

           <result name="input">/register.jsp</result>

       </action>

 

成功页面:

 

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <title>My JSP 'success.jsp' starting page</title>

    </head>

    <body>

       <table align="center" width="40%" border="1">

           <tr>

              <td>

                  username

              </td>

              <td>

                  ${requestScope.username}

              </td>

           </tr>

           <tr>

              <td>

                  password

              </td>

              <td>

                  ${requestScope.password}

              </td>

           </tr>

           <tr>

              <td>

                  age

              </td>

              <td>

                  ${requestScope.age}

              </td>

           </tr>

           <tr>

              <td>

                  birthday

              </td>

 

              <td>

                  ${requestScope.birthday}

              </td>

           </tr>

           <tr>

              <td>

                  graduation

              </td>

 

              <td>

                  ${requestScope.graduation}

              </td>

           </tr>

       </table>

    </body>

</html>

 

/*

文件必须有一个input的返回页面,要不就出现一下异常

type Status report

message No result defined for action com.test.action.PointAction and result input

description The requested resource (No result defined for action com.test.action.PointAction and result input) is not available.

 

 

例如:

<action name="pointConverter" class="com.test.action.PointAction">   

           <result name = "success">/output.jsp</result>

           <result name="input">/input.jsp</result>

       </action>

 

*/

 

校验的实现:public class RegisterAction extends ActionSupport复写验证方法

 

@Override

    public void validate()

    {

        //浏览器访问的方式可以有null的出现,其他情况没有Null出现

       if (null == username || username.length() < 6 || username.length() > 10)

       {

this.addFieldError("username", " username invalid ");

       }

 

    }

页面的调用错误信息:或在标签属性的上边显示

<%@ taglib prefix="s" uri="/struts-tags"%>

 

           <tr>

              <td style="color: red">

                  <s:fielderror></s:fielderror>

              </td>

           </tr>

 

注意,如果表单的输入不能转化(如整形)就采取默认值附加给它,提示出错。

 

遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面

 

类型转换与输入校验的流程

 

1. 首先Struts2对客户端传来的数据进行类型转换

 

2. 类型转换完毕后再进行输入校验

 

3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)

 

 

注意:如果类型转换不成功,也同样要进行输入校验

 

类型转换的错误信息改变,不使用struts2内置的类型转换功能

 

1Struts.xml文件

 

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

    <!-- constant 定义需要的常量,替换struts2内置的值。value国际化资源文件名,前面不能改变 -->

    <constant name="struts.custom.i18n.resources" value="message"></constant>

 

2src下建立message.properties文件(全局转换异常)

//下边等号前边是固定的表示出现不合法的属性值时使用,{0}是表单属性的名字

xwork.default.invalid.fieldvalue={0} error

 

 

局部验证在要验证的类的同一个目录下建立名称和验证类名一样的资源文件:

package com.test.action;//目录

 

RegisterAction.properties //文件

原创粉丝点击