`

自定义struts转换器实现向Map中存放对象类型数据

阅读更多
1、Document类:重点关注properties属性的映射及如何从页面向这种Map类型中存放数据
@Entity
@Table(name="t_document")
public class Document {
	@Id
	@GeneratedValue
	private int id;
	private String title;
	@Type(type="binary")
	@Column(length=99999999)
	private byte[] annex; //附件
	private long processInstanceId;
	private String description;
	private String status; //状态
	private Date createTime;
	@ManyToOne
	private WorkFlow workFlow;
	
	@ManyToOne
	private User creator; //公文创建者
	
//此属性存放的是集合类型 
	@CollectionOfElements
//为存放这个集合类型添加一张表 name:指定表的名称
	@JoinTable(name="t_documentproperties",
//joinColumns =@JoinColumn(name="documentId"):向新加入的这个表中添加一个字段名称为:documentId,这个值将作为新添加的这个表的主键
			joinColumns =@JoinColumn(name="documentId")
	)
//因为这个属性是Map类型的key是String类型value是DocumentProperty类型,指定这个注解是将Map的key值作为新添加的这个表中的一个字段,并且是主键。
	@MapKey(columns=@Column(name="propertyName"))
	private Map<String, DocumentProperty> properties;


2、DocumentProperty类
@Embeddable
public class DocumentProperty {
	
	private String java_lang_String;
	
	private Integer java_lang_Integer;
	
	@Type(type="binary")
	@Column(length=99999999)
	private byte[] java_io_File;
	
	private Long java_lang_Long;
	
	private Date java_util_Date;
	
	@Column(nullable=false)
	private String propertyType;
}


3、Action中的写法:在Action中不用做特别的定义因为Map类型的properties是Document的一个属性
@Component
@Scope("prototype")
public class DocumentAction extends BaseAction {
	
	private Document doc = new Document();
}


4、页面应该怎么写?

在jsp文件中我们向Map中提交数据对于一些基本的数据类型strtus2都自己能做转换
例如:<input type="xxx" name="properties['username'].java_lang_String" value="xxx" />意为:
'username'是此Map的key值,而java_lang_String 是DocumentProperty对象中的一个属性,那么这个输入域
的value值就赋值给这个字段,我们在DocumentProperty中定义的java_io_File是byte[]类型的,struts2默认
无法将java.io.File转换为byte[]类型,所以我们需要自己写一个转换器。

5、定义自己的转化器将java.io.File类型转化为byte[]类型
//继承strust2给我们提供的DefaultTypeConverter类
public class ByteArrayConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map<String, Object> context, Object value,
			Class toType) {
		File[] files = (File[])value;
		if(files == null || files.length == 0) {
			return null;
		}
		
		try {
			return FileUtils.readFileToByteArray(files[0]);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
}


写完上面这个转换器之后,我们还要添加一个配置文件,你要对哪个类中的这个属性进行转换就配置文件就以哪个类名开头然后-conversion.properties。我们这个例子是对DocumentProperty这个类中的java.io.File这个类型进行转换,所以我们配置文件的名称为DocumentProperty-conversion.properties。文件内容:
java_io_File=com.bjsxt.oa.model.ByteArrayConverter

这样当他对java_io_File这个属性赋值的时候就会来找到这个配置文件,然后交给com.bjsxt.oa.model.ByteArrayConverter这个类来处理,在这个类中我们将java.io.File类型转为byte[]类型。这个配置文件默认要放到与要转换的类同一个目录下面struts2才能找得到。

这个地方其实有struts2一个bug我们定义了转换器,但是后台还是会报错文件无法上传,我们还要在DocumentProperty类中增加两个方法才可以:
public void setJava_io_FileFileName(String s){}
	public void setJava_io_FileContentType(String s){}

这两个方法什么都不用做,添加上之后就不会报错了,文件上传成功!
分享到:
评论

相关推荐

    【多智能体控制】基于matlab事件触发多智能体编队控制(含间歇控制)【含Matlab源码 13223期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    《网页制作基础教程(Dreamweaver-CS3)》第11章-嵌入表单元素.ppt

    《网页制作基础教程(Dreamweaver-CS3)》第11章-嵌入表单元素.ppt

    V1_3_example.ipynb

    V1_3_example.ipynb

    《计算机应用基础项目教程》项目四-电子表格软件Excel2010的使用.pptx

    《计算机应用基础项目教程》项目四-电子表格软件Excel2010的使用.pptx

    《计算机系统结构》第4章-指令级并行.ppt

    《计算机系统结构》第4章-指令级并行.ppt

    西门子1200博途三部十层电梯控制系统及WinCC RT Pro界面设计详解

    内容概要:本文详细介绍了基于西门子S7-1200 PLC和WinCC RT Pro的三部十层电梯联控系统的设计与实现。主要内容涵盖硬件配置、核心算法如电梯间协同算法、方向判断函数、状态机设计、呼叫调度算法以及WinCC画面设计中的动画效果和平滑移动实现方法。文中还讨论了常见的调试问题及其解决方案,如方向锁死、编码器干扰等。此外,强调了状态机在电梯控制中的重要性,并提供了具体的代码示例来解释各个功能模块的工作原理。 适合人群:自动化工程师、PLC程序员、HMI开发者、工业控制系统设计师。 使用场景及目标:适用于希望深入了解电梯控制系统设计原理和技术实现的专业人士。目标是帮助读者掌握电梯联控系统的编程技巧,提高对工业控制项目的理解和应用能力。 其他说明:文章不仅提供详细的代码片段,还分享了许多实践经验,有助于读者更好地理解和应对实际工程项目中的挑战。

    飞猫智联u20一键打开adb并安装

    飞猫智联u20一键打开adb并安装

    DeepSeek:智能时代的全面到来和人机协作的新常态.pdf

    DeepSeek:智能时代的全面到来和人机协作的新常态.pdf

    电机控制领域PMSM无传感HFI高频谐波注入与滑模观测器仿真模型解析(基于28035)

    内容概要:本文深入探讨了永磁同步电机(PMSM)无传感器控制技术中的高频谐波注入(HFI)方案及其滑模观测器仿真模型。主要介绍了HFI的工作原理,即通过向电机定子绕组注入高频信号并检测其响应来估算转子位置和速度。文中提供了详细的代码实现,包括高频信号生成、电流检测与处理、滑模观测器核心算法等。此外,还分享了实际工程项目中的调试经验和常见问题解决方案,如参数选择、硬件配置、滤波处理等。 适合人群:从事电机控制系统开发的技术人员,尤其是对PMSM无传感器控制感兴趣的工程师。 使用场景及目标:适用于需要提高PMSM电机控制性能的应用场合,如工业自动化设备、伺服系统等。目标是在低速条件下实现精确的转子位置和速度估算,从而提升系统的整体性能。 其他说明:文章不仅提供了理论和技术细节,还结合了大量实践经验,帮助读者更好地理解和应用HFI技术。同时强调了实际工程中需要注意的各种细节,如参数整定、硬件配置、滤波处理等,确保方案的可靠性和稳定性。

    OAI-10th-Anniversary-Workshop

    5G 6G NR-NTN A Hardware perspective && OAI-10th-Anniversary-Workshop-Qualcomm-2.pdf An SMEs Journey Towards 5G6G NTN Disruptive Technologies Lasting Software--OAI-10th-Anniversary-Workshop-Lasting-Software.pdf Deploying Private 5G with the Open Air Interface- OAI-10th-Anniversary-Workshop-Firecell-.pdf End-to-End Open-Source 5G and O-RAN Prototyping in ARA for Low-Latency Agriculture Applications OAI-10th-Anniversary-Workshop-Iowa-State-University.pdf OAI 5G NR NTN – PHY and MAC Layer Contributions 20240913_Fraunhofer_IIS_OAI_NTN_reduced.pdf Open Source in Telecoms Driving 5G innovatio--OAI-10th-Anniversary-Workshop-Canonical.pdf OpenAirInterface Recent Developments & Roadmap OAI-10th-Anniversary-Workshop-Florian-Kaltenberger.pdf The road of artificial intelligence towards the 6G

    三菱FX2N PLC编码器脉冲数测量距离的技术解析及应用

    内容概要:本文详细介绍了如何使用三菱FX2N系列PLC通过编码器脉冲数计算输出距离的方法。首先,文章阐述了核心思路,即通过采集编码器产生的脉冲数,结合预先设定的脉冲数和输出长度参数,经过一系列浮点数运算得出输出距离。文中展示了详细的代码实现步骤,包括初始化部分、脉冲采集部分、浮点数运算部分和结果处理部分。此外,还讨论了一些常见的调试技巧和注意事项,如数据溢出处理、双编码器校验、方向信号处理等。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是对PLC编程有一定基础的人群。 使用场景及目标:适用于需要精确测量距离的工业控制系统,如输送带系统、机械臂定位等。主要目标是帮助工程师掌握如何利用PLC和编码器实现高精度的距离测量。 其他说明:文章提供了丰富的代码示例和调试建议,有助于读者在实际项目中灵活运用相关技术和解决常见问题。同时强调了浮点运算在提高测量精度方面的优势及其潜在挑战。

    无刷直流电机BLDC转速电流双闭环调速系统的Matlab Simulink仿真研究

    内容概要:本文详细介绍了如何使用Matlab Simulink搭建无刷直流电机(BLDC)的转速电流双闭环调速系统。首先阐述了系统的基本架构,即外层转速环和内层电流环的作用及其相互关系。接着逐步讲解了各个模块的具体实现方法,包括电机模型参数设置、PI控制器参数配置、PWM信号生成、坐标变换等关键技术。通过仿真结果分析,展示了转速和电流响应曲线,探讨了参数调整对系统性能的影响。最终实现了对电机转速的精确控制,并提供了优化建议。 适合人群:从事电机控制领域的工程师和技术人员,尤其是有一定Matlab/Simulink基础的研究人员。 使用场景及目标:适用于希望深入了解BLDC电机控制原理及仿真的技术人员。目标是在理论基础上通过仿真工具掌握双闭环调速系统的构建与优化方法。 其他说明:文中不仅提供了详细的建模步骤,还分享了许多实用的经验技巧,如PI参数选择、PWM生成方式的选择、死区时间设置等,有助于提高实际应用中的系统性能。

    网课搜题 小猿题库多接口微信小程序源码 自带流量主.zip

    多接口小猿题库等综合网课搜题微信小程序源码带流量主,网课搜题小程序, 可以开通流量主赚钱 搭建教程 1, 微信公众平台注册自己的小程序 2, 下载微信开发者工具和小程序的源码 3, 上传代码到自己的小程序

    weixin287火锅店点餐系统的设计与实现+ssm(文档+源码)_kaic

    weixin287火锅店点餐系统的设计与实现+ssm(文档+源码)_kaic

    DotCom Secrets:在线增长策略揭秘

    《DotCom Secrets》是拉斯洛·布劳恩所著的一本关于如何使用在线营销策略来增长公司业务的书籍。本书揭示了在线营销巫师兄弟会不愿公开的秘密,强调了直接响应营销的重要性,并提供了构建和优化营销漏斗的系统方法。书中不仅介绍了如何通过各种在线渠道获取流量、提高转化率和销售,还提供了如何发现目标客户、构建价值阶梯以及如何利用“肥皂剧序列”等策略。拉斯洛·布劳恩通过本书,旨在帮助企业家在充满变数的互联网世界中找到坚实的营销基础。

    基于单片机的智能秤设计(程序+电路+仿真)(51+1602+HX711+10KG+BZ+KEY16)#0415

    包括:源程序工程文件、Proteus仿真工程文件、电路原理图文件、配套技术手册、论文资料等 1、采用51/52单片机(通用)作为主控芯片; 2、采用压力传感器+HX711模块检测压力; 3、可通过按键设置物品单价; 4、采用LCD1602对重量/单价/总价进行显示; 5、当物品超出传感器量程时,蜂鸣器进行过载报警。

    First Word Fall Through FIFO与Standard FIFO对比仿真

    First Word Fall Through FIFO特点是输出端口数据保持有效,读使能有效时即有数据输出。Standard FIFO在读使能有效时,数据一般延时1个时钟周期输出。通过仿真来查看这两种FIFO的特点。

    电力电子领域中二极管箝位型三电平逆变器(NPC)的SVPWM调制与中点电位平衡仿真

    内容概要:本文深入探讨了二极管箝位型三电平逆变器(NPC)的关键技术和挑战,主要包括三电平空间矢量调制(SVPWM)和中点电位平衡调制。SVPWM通过合成参考电压矢量使输出电压接近正弦波,而中点电位平衡则解决因直流侧电容充放电不平衡导致的问题。文中提供了详细的MATLAB代码示例,展示了如何实现这两种调制方法,并介绍了在MATLAB/Simulink中构建仿真模型的具体步骤。此外,文章还讨论了一些实用技巧,如使用坐标变换简化扇区判断、引入滞回比较稳定矢量位置、以及通过预测电流法改善中点电位平衡的动态响应。 适合人群:从事电力电子领域的研究人员和技术人员,尤其是对三电平逆变器有兴趣的工程师。 使用场景及目标:适用于需要深入了解NPC三电平逆变器工作原理的研究人员,帮助他们掌握SVPWM调制和中点电位平衡的技术细节,从而优化逆变器的设计和性能。 其他说明:文章不仅提供了理论分析,还包括大量实际工程中的经验和技巧,有助于读者更好地理解和应用相关技术。

    《计算机专业英语》Unit-5-What-is-Operating-System.ppt

    《计算机专业英语》Unit-5-What-is-Operating-System.ppt

Global site tag (gtag.js) - Google Analytics