Www.helper3.com
热门关键字: php net javascript java
Struts2基础 专题
专题目录
您的位置:java > Struts2基础专题 > Struts2 类型转换
Struts2 类型转换
作者:--    发布时间:2019-11-20 10:12:32

在http请求中的一切都被视为一个string由协议。这包括数字,布尔值,整数,日期,小数和一切。每一件事情是一个字符串,将根据http。然而,struts类可以有任何数据类型的属性。struts的自动装配属性?

struts使用了多种类型转换器在幕后做繁重。例如,如果action类的属性有一个整数,struts的自动转换请求参数的整数属性没有做任何事情。默认情况下,struts的一些类型转换器。下面列出了他们中的一些,如果您正在使用其中任何一个,那么你有什么可担心的:

  • integer, float, double, decimal

  • date and datetime

  • arrays and collections

  • enumerations

  • boolean

  • bigdecimal

有些时候,当使用自己的数据类型,它是需要添加自己的转换,使struts知道如何将这些值,然后显示。考虑以下pojo类environment.java。

package com.h3.struts2;

public class environment {
   private string name;
   public  environment(string name)
   {
      this.name = name;
   }
   public string getname() {
      return name;
   }
   public void setname(string name) {
      this.name = name;
   }
}

这是一个非常简单的类,它有一个名为name的属性,所以没有什么特别的关于这个类。我们创建包含有关系统 - systemdetails.java信息另一个类。目的是练习,我有硬编码环境,以“开发”在操作系统“windows xp sp3”。在实际项目中,会从系统配置得到信息。因此,让我们有以下动作类: 

package com.h3.struts2;
import com.opensymphony.xwork2.actionsupport;

public class systemdetails extends actionsupport {
   private environment environment = new environment("development");
   private string operatingsystem = "windows xp sp3";

   public string execute()
   {
      return success;
   }
   public environment getenvironment() {
      return environment;
   }
   public void setenvironment(environment environment) {
      this.environment = environment;
   }
   public string getoperatingsystem() {
      return operatingsystem;
   }
   public void setoperatingsystem(string operatingsystem) {
      this.operatingsystem = operatingsystem;
   }
}

接下来让我们创建一个简单的jsp文件system.jsp显示环境和操作系统信息。

<%@ page language="java" contenttype="text/html; charset=iso-8859-1"
pageencoding="iso-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" 
"http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<title>system details</title>
</head>
<body>
   environment: <s:property value="environment"/><br/>
   operating system:<s:property value="operatingsystem"/>
</body>
</html>

让我们编写 system.jsp,systemdetails.java类在struts.xml一起使用。 systemdetails类有一个简单的execute()方法返回字符串“success”。

<?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 name="struts.devmode" value="true" />
   <package name="helloworld" extends="struts-default">
      <action name="system" 
            class="com.h3.struts2.systemdetails" 
            method="execute">
         <result name="success">/system.jsp</result>
      </action>
   </package>
</struts>

右键点击项目名称,并单击 export > war file 创建一个war文件。然后部署此war在tomcat的webapps目录下。最后,启动tomcat服务器和尝试访问url http://localhost:8080/helloworldstruts2/system.action。这会给出以下画面:

system info

上面的输出有什么错? struts 知道如何显示字符串“windows xp sp3”等内置数据类型转换,但它不知道用environmenttype属性做什么。所以,它只是被称为类的tostring()方法。为了解决这个问题,现在让我们创建并注册一个简单的typeconverter环境类。创建一个类名为environmentconverter.java以下。

package com.h3.struts2;

import java.util.map;
import org.apache.struts2.util.strutstypeconverter;

   public class environmentconverter extends strutstypeconverter {
      @override
      public object convertfromstring(map context, string[] values, 
                                      class clazz) {
      environment env = new environment(values[0]);
      return env;
   }

   @override
   public string converttostring(map context, object value) {
      environment env  = (environment) value;
      return env == null ? null : env.getname();
   }	
}

environmentconverter 扩展了 strutstypeconverter 类,如何将环境为一个 string,反之亦然通过重写两个的方法 convertfromstring()和 converttostring()并通知了struts。现在,让我们注册这个转换器之前,我们我们在我们的应用程序。有两种方法来注册一个转换器。如果转换器将只用于在一个特定的动作,那么将需要创建一个属性文件需要被命名为 '[action-class]'-converstion.properties,所以,在我们的例子中,我们创建一个名为systemdetails下面的注册 converstion.properties 输入: 

environment=com.h3.struts2.environmentconverter

在上面的例子中,“environment”的名字是在systemdetails.java 类的一个属性,告诉要使用struts environmentconverter从这个属性的转换。但是,我们不打算这样做,相反,我们要在全局范围内注册这个转换器,因此,它可以在整个应用程序。要做到这一点,创建一个属性文件名为 xwork-conversion.properties 在 web-inf/classes文件夹下面一行:

com.h3.struts2.environment = 
            com.h3.struts2.environmentconverter

这简单的注册全局转换器,这样的struts可以自动做转换每次遇到一个对象类型的环境。现在,如果重新编译并重新运行该程序,会得到更好的输出如下:

system info

很显然,现在的结果是更好的,这意味着我们的struts的转换工作正常。这是可以创建多个转换器和按要求注册后才能使用。


所有评论

loading......

滚动到顶部 滚动到底部
合作联系(微信):
www.helper3.com
关于本站:
宗旨
网站备案号:
粤ICP备17073857号-1

声明:
本站部分内容来自网络,如您发现本站内容侵害到您的利益,请联系本站管理员处理。