zoukankan      html  css  js  c++  java
  • struts2.0自定义类型转换

    在Struts2.0框架中内置了类型转换器,可以很方便的实现在八大数据类型、Date类型之间的自动转换;此外也可以根据自己的需求自定义数据转换类。如下:

    首先看一下项目工程中的目录

    1.在新建的web project项目的web Root中新建input.jsp,用来输入用户名和密码

     1 <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'input.jsp' starting page</title>
    13     
    14     <meta http-equiv="pragma" content="no-cache">
    15     <meta http-equiv="cache-control" content="no-cache">
    16     <meta http-equiv="expires" content="0">    
    17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18     <meta http-equiv="description" content="This is my page">
    19     <!--
    20     <link rel="stylesheet" type="text/css" href="styles.css">
    21     -->
    22 
    23   </head>
    24   
    25   <body>
    26     <body >
    27    
    28    <h1>使用分号隔开用户名与密码信息</h1>
    29    
    30    <form action="userAction.action">
    31    
    32    user info 1: <input type="text" name="user"><br><!--这里name的属性值名称和UserAction中的Get/Set方法名称对应-->
    33    <input type="submit" value="submit">
    34    
    35    </form>
    36   </body>
    37 </html>

     2.继续在web Root中新建output.jsp页面,用来显示服务端传来的类型转换值(自定义类型--------->String类型)

     1 <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
     2 <!-- 通过taglib导入Struts2中自带的标签库 -->
     3 <%@ taglib prefix="s" uri="/struts-tags" %>
     4 <%
     5 String path = request.getContextPath();
     6 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     7 %>
     8 
     9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    10 <html>
    11   <head>
    12     <base href="<%=basePath%>">
    13     
    14     <title>显示结果页面</title>
    15     
    16     <meta http-equiv="pragma" content="no-cache">
    17     <meta http-equiv="cache-control" content="no-cache">
    18     <meta http-equiv="expires" content="0">    
    19     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    20     <meta http-equiv="description" content="This is my page">
    21     <!--
    22     <link rel="stylesheet" type="text/css" href="styles.css">
    23     -->
    24 
    25   </head>
    26   
    27   <body>
    28   <!-- 获得转到jsp页面之前的user属性 这里的user要和对应action中的user对应-->
    29     <s:property value="user" />
    30   </body>
    31 </html>

    3.在新建的web project项目的src中新建com.converter包,并在包中新建一个转换器类,如下图:

    并在该UserConverter类中重写public Object convertValue(Map context, Object value, Class toType)函数,如下:

    //类型转换方向有页面字符串转换为自定义类型对象,或自定义类型对象转换为字符串

    //toType参数代表你需要转换的目标类型

    //value参数是具体的需要转换的对象,如果value是页面往自定义类型转,则value应为String[]类型

     1 package com.converter;
     2 import java.util.Map;
     3 import java.util.StringTokenizer;
     4 import ognl.DefaultTypeConverter;
     5 import com.bean.User;
     6 public class UserConverter extends DefaultTypeConverter {
     7 
     8     @Override
     9     public Object convertValue(Map context, Object value, Class toType) {
    10         if(User.class == toType)  //从页面向后台对象转换
    11         {
    12             String[] str = (String[])value;  //将获取到的value值转换为字符串数组
    13             
    14             String firstValue = str[0];
    15             
    16             StringTokenizer st = new StringTokenizer(firstValue, ";");
    17             /*---------分隔字符串也可以使用一下split方法,效果和上面的方法效果一样
    18                             String[] str1=firstValue.split(";");
    19                             String username = str1[0];
    20                             String password = str1[1];
    21                              */
    22             String username = st.nextToken();
    23             String password = st.nextToken();
    24             //创建User,并将转换后的username和password通过setXXX()方法放入到User对象中
    25             User user = new User();
    26             
    27             user.setUsername(username);
    28             user.setPassword(password);
    29             
    30             return user;        
    31         }else if(toType == String.class){  //从服务器转到前端
    32             //将value类型从object强制转换成User对象
    33             User user = (User)value;
    34             String username = user.getUsername();
    35             String password = user.getPassword();
    36             String userInfo = "username = " + username + ", password = " + password;
    37             return userInfo;
    38         }
    39         return null;
    40     }
    41 
    42 }

    4.在src中创建com.LHB.bean包并在包中创建User.java的bean

     1 package com.LHB.bean;
     2 public class User {
     3 
     4     private String username;
     5     private String password;
     6     public String getUsername() {
     7         return username;
     8     }
     9     public void setUsername(String username) {
    10         this.username = username;
    11     }
    12     public String getPassword() {
    13         return password;
    14     }
    15     public void setPassword(String password) {
    16         this.password = password;
    17     }    
    18 }

    5.创建com.action包,在包建UserAction.java

     1 package com.action;
     2 
     3 import com.bean.User;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 
     6 public class UserAction extends ActionSupport {
     7 
     8     private User user;
     9 
    10     public User getUser() {
    11         return user;
    12     }
    13 
    14     public void setUser(User user) {
    15         this.user = user;
    16     }
    17 
    18     @Override
    19     public String execute() throws Exception {
    20         System.out.println("username = " + user.getUsername());
    21         System.out.println("password = " + user.getPassword());
    22         return SUCCESS;
    23     }
    24     
    25     
    26 }

    6.配置struts.xml文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 <struts>
     6     <!-- 设置Struts运行模式为开发者模式,如果value为false则关闭开发者模式 -->
     7     <constant name="struts2.devMode" value="true"></constant>
     8     <package name="default" namespace="/" extends="struts-default">
     9         
    10         <action name="userAction" class="com.action.UserAction">
    11             <!-- <result name="input">/upload.jsp</result> -->
    12             <result name="success">/output.jsp</result>
    13         </action>
    14     </package>
    15 </struts>

    7.在com.action包下新建UserAction-conversion.properties属性文件配置User的转换信息找到对应的转换器类

     注意:这里的属性文件名称命名是有规则的,XXXAction-conversion.properties中的XXX必须是对应action的文件名

    user:表示需要转换的属性名,要执行的转换服务的转换器路径

    8.结果:

    用户信息输入

    从页面String类型转换到服务器端自定义User类型在控制台中显示的结果信息

    从服务器端的User类型转换为页面的String类型,结果显示在output.jsp页面中。如下:

  • 相关阅读:
    window.history 和 DWZ 框架
    Ztree 随笔记
    eval的对于验证数学公式的用处
    lodop打印控件一点记录
    font和lineheight冲突。
    Windows CMD命令大全
    centos 下安装pip pip3
    Linux访问windows共享文件夹
    数据库主从和读写分离的配置和使用方法
    centos7 nginx+php7yum安装
  • 原文地址:https://www.cnblogs.com/lihuibin/p/7905413.html
Copyright © 2011-2022 走看看