List 序列化与反序列化到struts2的<s:hidden>变量

来源:互联网 发布:java调用方法 编辑:程序博客网 时间:2024/05/16 08:33

List 序列化与反序列化到struts2的<s:hidden>变量

实现方法:

1、在Action类添加如下get/set方法,可以不需要属性:


2、把在要序列化的字段添加到form中


hidden标签用来向action传递参数

jsp页面要序列化的字段要与Action的get/set方法名称对应。

serversPayExpendList查询出的充值消费新增变量,是要序列化的原变量,页面通过getSerServersPayExpendList()方法序列化serversPayExpendList变量的值,序列后以字符串的形式存储到页面的serServersPayExpendList中,当导出报表时,页面的serServersPayExpendList变量通过setSerServersPayExpendList()方法反序列化后再次存储到serServersPayExpendList变量中,这样查询后的信息可以再次利用,不用再从数据库查询,可以提高查询和导出报表的运行速度。

用另一个变量存储序列化值的原因,strut2不支持同一个页面存在两个相同名称的变量,序列化成字段串也便于传输。

序列化和反序列化的方法如下:



附录:

import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;/** * 序列化工具类 * @author file * @version 1.0 * @since 2013-04-11  */@SuppressWarnings("restriction")public final class SerializableUtil {/** * base64 加密 */private static final BASE64Encoder BASE64_ENCODER = new BASE64Encoder();/** * base64 解密 */private static final BASE64Decoder BASE64_DECODER = new BASE64Decoder();/** * 序列化 * @param obj 对象 * @return 字符串 */public static <T> String serialize(T obj) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = new ByteArrayOutputStream();  //序列化 try {oos = new ObjectOutputStream(baos);oos.writeObject(obj);return  BASE64_ENCODER.encodeBuffer(baos.toByteArray());} catch (IOException e) {e.printStackTrace();}finally{try {if(oos!=null)oos.close();if(baos!=null)baos.close();} catch (IOException e) {e.printStackTrace();}  }return null;}/** * 反序列化 * @param str 字符串 * @param clazz 返回的对象类 * @return 对象 */public static <T> T unSerialize(String str,Class<T> clazz) {  ByteArrayInputStream bais = null; ObjectInputStream ois = null; try { byte[] bytes = BASE64_DECODER.decodeBuffer(str); bais = new ByteArrayInputStream(bytes); ois = new ObjectInputStream(bais); @SuppressWarnings("unchecked")T object = (T) ois.readObject();return object;} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}finally{ try { if(ois!=null) ois.close(); if(bais!=null) bais.close();} catch (IOException e) {e.printStackTrace();}  } return null;}}




1 0
原创粉丝点击