当前位置: 首页 > news >正文

国家住房和城乡建设部网站网站推广公司兴田德润

国家住房和城乡建设部网站,网站推广公司兴田德润,公司网络推广,php+网站开发案例教程第七章 Type Convertion为什么会有类型转换#xff1f;HTTP协议中传递的任何内容都是String类型的#xff0c;所以一旦我们在服务器上需要一个非String类型的对象#xff0c;例如#xff1a;int或者Date#xff0c;那么我们就需要在收到HTTP请求的数据的时候#xff0c;首…第七章 Type Convertion为什么会有类型转换HTTP协议中传递的任何内容都是String类型的所以一旦我们在服务器上需要一个非String类型的对象例如int或者Date那么我们就需要在收到HTTP请求的数据的时候首先将String类型的数据变换为我们需要的对应类型的数据之后再使用。这个过程就是类型转换类型转换在Struts2中是透明的即Struts2内置了类型转换机制。转换原理以一个例子来说明如何使用Struts2内置的类型转换功能。加入我们希望用户在画面上输入一个字符形式的坐标点例如(332)而我们希望在程序中得到一个Point(33 2)的类型与之对应。要想达到上面的功能我们需要一个名字位ActionName-conversion.properties的文件在文件中定义Action中的属性和画面字段之间的转换关系。例如point com.jpleasure.convertor.PointConverter也就是说画面一个叫做point的项目(input类型name为point)提交到服务器上之后在向Action中的point属性赋值之前需要使用PointConverter将字符串转换为Point类在Action中的point属性向画面显示的时候需要使用PointConverter将Point类转换为字符串类型。其中PointConverter需要实现ognl.TypeConverter接口。TypeConverter有两个接口一个负责将字符串转变为对象类型另一个负责将对象类型转换为字符串类型分别对应着内容的提交和显示。有些时候我们希望所有的Point类在默认的情况下使用PointConverter来转换这时候我们需要定义全局的Converter类。这可以在xwork-conversion.properties文件中定义例如com.jpleasure.Point com.jpleasure.convertor.PointConverter在Struts2中提供了一个TypeConverter接口的默认实现:org.apache.struts2.action.util.StrutsTypeConverter这个类有两个默认的抽象转换方法和performFallbackConversionperformFallbackConversion方法负责处理类型转换出错的处理。在自定义TypeConverter的时候可以实现TypeConverter接口之后编写TypeConverter的转换方法也可以从StrutsTypeConverter继承而来StrutsTypeConverter本身实现了TypeConverter接口并且实现了基本的转换方法。内建的转换Struts2内建了对以下类型的转换的支持Stringboolean / Booleanchar / Characterint / Integer, float / Float, long / Long, double / Doubledates - 使用HTTP 请求对应地域(Locale)的SHORT形式转换字符串和日期类型。arrays -每一个字符串内容可以被转换为不同的对象collections - 转换为Collection类型默认为ArrayList类型其中包含String类型。对于Array类型和Collection类型需要对其中的每一个元素进行单独的转换。自定义TypeConverter使用如下的代码自定义需要的TypeConverterpublic class MyConverter extends StrutsTypeConverter {public Object convertFromString(Map context, String[] values, Class toClass) {.....}public String convertToString(Map context, Object o) {.....}}为了让Struts2框架发现类型转换的错误需要在出错的情况下在上述的两个方法中抛出XWorkException或者TypeConversionException。我们使用一个例子来展现如何实现TypeConvertor类型// Point 类package com.jpleasure.conversion;/*** Created by IntelliJ IDEA.* User: ma.zhaodl.cn* Date: 2007/09/04* Time: 12:33:43* To change this template use File | Settings | File Templates.*/public class Point {private int x;private int y;public Point() {}public Point(int x, int y) {this.x x;this.y y;}public int getX() {return x;}public void setX(int x) {this.x x;}public int getY() {return y;}public void setY(int y) {this.y y;}public String toString() {StringBuffer sb new StringBuffer(Point();sb.append(x).append(, ).append(y).append());return sb.toString();}}// PointConvertor 类package com.jpleasure.conversion;import org.apache.struts2.util.StrutsTypeConverter;import java.util.Map;/*** Created by IntelliJ IDEA.* User: ma.zhaodl.cn* Date: 2007/09/04* Time: 12:34:18* To change this template use File | Settings | File Templates.*/public class PointConvertor extends StrutsTypeConverter {// 从字符串转换为对象的方法。public Object convertFromString(Map map, String[] strings, Class aClass) {if (strings.length 0) {String pointStr strings[0];String[] pointStrArray pointStr.split(,);if (pointStrArray.length 2) {Point p new Point();p.setX(Integer.parseInt(pointStrArray[0]));p.setY(Integer.parseInt(pointStrArray[1]));return p;} else {return null;}} else {return null;}}// 从对象转换为字符串的方法。public String convertToString(Map map, Object o) {if (o instanceof Point) {return o.toString();} else {return ;}}}// 测试用PointAction类package com.jpleasure.action;import com.jpleasure.conversion.Point;import com.opensymphony.xwork2.ActionSupport;/*** Created by IntelliJ IDEA.* User: ma.zhaodl.cn* Date: 2007/09/04* Time: 12:45:11* To change this template use File | Settings | File Templates.*/public class PointAction extends ActionSupport {private Point point;public Point getPoint() {return point;}public void setPoint(Point point) {this.point point;}public String execute() {return SUCCESS;}}// JSP文件Created by IntelliJ IDEA.User: ma.zhaodl.cnDate: 2007/09/04Time: 12:47:40To change this template use File | Settings | File Templates.--%Point Page// PointAction配置文件类。/p-//Apache Software Foundation//DTD Struts Configuration 2.0//ENhttp://struts.apache.org/dtds/struts-2.0.dtd/point/Point.jsp/point/Point.jsp复杂的类型转换(1)处理Null值有些时候我们会被NullPointerException搞的焦头烂额为什么系统不能为我们定义了但是没有初始化的对象建立一个空的Object的引用呢Struts2有这个功能但是在默认情况下Struts2关闭了这个功能要想开启这个功能需要在ParameterInterceptor开始处理参数之前在ValueStack中将一个值开启这个值是InstantiatingNullHandler.CREATE_NULL_OBJECTS。在Java代码中InstantiatingNullHandler.CREATE_NULL_OBJECTS的值是xwork.NullHandler.createNullObjects创建空值对象的规则为如果属性声明为Collection或List, 将返回一个ArrayList并赋值给空引用.如果属性声明为Map, 将返回一个HashMap并赋值给空引用.如果空值属性是一个带有无参构造函数的简单Bean, 将使用ObjectFactory.buildBean(java.lang.Class, java.util.Map)方法创建一个实例.(2)Collection和Map简单List转换//JSP代码Created by IntelliJ IDEA.User: mazhaoDate: 2007/09/04Time: 12:47:40To change this template use File | Settings | File Templates.--%Point Page//Action代码package com.jpleasure.action;import com.jpleasure.conversion.Point;import com.opensymphony.xwork2.ActionSupport;import java.util.List;/*** Created by IntelliJ IDEA.* User: ma.zhaodl.cn* Date: 2007/09/04* Time: 12:45:11* To change this template use File | Settings | File Templates.*/public class PointAction extends ActionSupport {private Point point;private List references;public Point getPoint() {return point;}public void setPoint(Point point) {this.point point;}public List getReferences() {return references;}public void setReferences(List references) {this.references references;}public String execute() {if(references null) {System.out.println(references is null);} else {System.out.println(references length is: references.size());for(Object s: references) {System.out.println( s);}}return SUCCESS;}}对象类型List转换(key-value pair 方式)// Person 类型package org.apache.struts2.showcase.conversion;import java.io.Serializable;/****/public class Person implements Serializable {private String name;private Integer age;public void setName(String name) { this.name name; }public String getName() { return this.name; }public void setAge(Integer age) { this.age age; }public Integer getAge() { return this.age; }}// PersionAction 类型package org.apache.struts2.showcase.conversion;import java.util.List;import com.opensymphony.xwork2.ActionSupport;/****/public class PersonAction extends ActionSupport {private List persons;public List getPersons() { return persons; }public void setPersons(List persons) { this.persons persons; }public String input() throws Exception {return SUCCESS;}public String submit() throws Exception {return SUCCESS;}}// PersonAction转化配置文件PersonAction-conversion.properties# PersonAction中persons属性(List类型)中元素的类型Element_personsorg.apache.struts2.showcase.conversion.Person// JSP部分代码name%{persons[#stat.index].name} /name%{persons[#stat.index].age} /其中stat记录了当前循环的信息其中stat.index表示当前循环的下标。所以上述代码会生成如下的代码namepersons[0].name /namepersons[0].age /namepersons[1].name /namepersons[1].age /namepersons[2].name /namepersons[2].age /对象类型List转换(value 方式)// Address 类型package org.apache.struts2.showcase.conversion;/*** version $Date: 2006-11-23 12:31:52 -0500 (Thu, 23 Nov 2006) $ $Id: Address.java 478625 2006-11-23 17:31:52Z wsmoak $*/public class Address {private String id;private String address;public String getId() { return id; }public void setId(String id) { this.id id; }public String getAddress() { return address; }public void setAddress(String address) { this.address address; }}// AddressAction 类型package org.apache.struts2.showcase.conversion;import java.util.LinkedHashSet;import java.util.Set;import com.opensymphony.xwork2.ActionSupport;/*** version $Date: 2006-11-23 12:31:52 -0500 (Thu, 23 Nov 2006) $ $Id: AddressAction.java 478625 2006-11-23 17:31:52Z wsmoak $*/public class AddressAction extends ActionSupport {private Set addresses new LinkedHashSet();public Set getAddresses() { return addresses; }public void setAddresses(Set addresses) { this.addresses addresses; }public String input() throws Exception {return SUCCESS;}public String submit() throws Exception {System.out.println(addresses);return SUCCESS;}}//AddressAction转换配置文件AddressAction-conversion.propertiesKeyProperty_addressesidElement_addressesorg.apache.struts2.showcase.conversion.AddressCreateIfNull_addressestrue// JSP代码name%{addresses(\\id#stat.index\\).address} /上述代码会转换为nameaddresses(id0) /nameaddresses(id1) /nameaddresses(id2) /  注意两个地方第一没有向服务器提交Address的id属性那么Address的id属性是什么呢KeyProperty_addressesid表示向服务器提交的内容的key部分(id0” id1” id2”)会被认定为Addredd的id。第二CreateIfNull_addressestrue表示及时客户端没有向服务器提交任何Address内容服务器也会为AddressAction的addresses 建立一个长度为0的Set。相关的一些经验开发的过程中不要一味的使用String类型使用String类型无论在处理的速度还是内存的使用上都不是最好的方式。一般情况下Java的模型类(JavaBeanAction等都可以视为Java模型类因为其中表示了模型的信息)一般情况下需要和数据库中的类型一致。这样才能保证最好的性能。那么像java.util.DateInteger等类型需要表示到JSP页面上的时候还是需要表示为String类型的但是Struts2都已经帮助实现了所以请使用具体的类型吧不要总是使用String类型。ExtJS教程-Hibernate教程-Struts2 教程-Lucene教程
http://www.pierceye.com/news/369277/

相关文章:

  • 余姚做网站深圳华强北怎么了
  • 网站建设单元格边距WordPress进
  • 备案后的域名改网站名沪深300指数怎么买
  • 行业网站维护买电脑wordpress
  • 廊坊兼职网站建设网站图片怎么做的高级
  • pc网站转换手机网站wap用jsp源码做网站
  • 重庆慕尚网站建设在线美工
  • 珠海网站设计培训源码网站
  • 中山好的做网站的公司网站seo外包
  • 付费的网站是指展览馆网站建设方案书
  • 免费整套ppt模板下载网站网络营销推广目的
  • 公司 做网站企业手机app开发公司
  • 玉树电子商务网站建设多少钱做类似淘宝一样的网站
  • 住房城乡与建设厅网站燕郊网站开发
  • 欧美风格网站特点wordpress 电影主题
  • 烟台网站建设网站推广团队logo标志设计
  • 怎么注册建设银行网站如何创建属于个人网站
  • 双语网站系统wordpress page 父页面
  • 连云港做网站设计稿定设计官网入口
  • 建筑网站推荐wordpress hook api
  • 昆明做网站公司哪家好安卓优化
  • 魔站建站系统哪家好国内知名的包装设计公司
  • 福田区住房和建设局网站早晨设计 做网站设计吗
  • 郑州轨道网站开发手机怎么做动漫微电影网站
  • vscode网站开发昆明做网站找启搜网络
  • 如何评估网站虚拟商品交易网站建设
  • 太原网站优化教程pycharm做网站
  • 哪些网站做英语比较好免费下载模板ppt
  • 网站建设运营计划书wordpress 维护页面
  • 襄阳定制型网站开发前端网页设计招聘