如何定制struts以适应自己的需求

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

背景资料:

本人开始Java开发是最近两个月的事,在一个项目中决定是使用struts框架还是自己开发框架,我犹豫不决。 于是开始看struts的代码,最後决定使用struts,但自己做一些扩展。

由于本人jsp,java等接触时间太短,如有不对的地方或者更好的办法,请各位指教。

相关资源清单:

struts1.1的源代码

jakarta commons-beanutils1.6.1的源代码

动机:

1.我在看struts时发现,struts在作ActionForm的反射赋值时,不能格式化,如:金额不能用类似¥##,###.00的方式作为输入;但在很多应用场合格式化是必要的,因此这是我要解决的第一个问题。

2.struts的一个优点是他将Request的非对象化参数映射为一个对象化的实例(ActionForm),但我觉得它做到这一步还不够好;因为ActionForm一般不能作为层间传输的对象,它带来了太多的包间依赖;能不能自接生成我们要的ValueObject或其他呢。

3.改动必须兼容struts原有的功能。

格式化的问题解决:

这是一个比较麻烦的问题,它需要修改beanutils包,增加格式化的相应参数:

1.修改converter接口,增加支持pattern参数的方法

2.在BeanUtilsBean中增加public void populate(Object bean, Map properties, Map patterns)方法

3.修改RequestUtils public static void populate( Object bean, String prefix, String suffix,HttpServletRequest request)方法

这里还没有完因为,没法传入格式化信息,为了解决这个问题有以下要做的

1.修改struts-config_1_1.dtd

增加ATTLIST form-bean formats CDATA ""

formats字段格式

2.修改FormBeanConfig增加formats属性

3.修改ActionForm增加FormBeanConfig属性,这样RequestUtils.populate就可以访问format的了

直接映射VO的解决:

1.增加一个动态Bean类

ProxyActionForm她实现DyncBean和继承ActionForm作为VO的中间代理

ProxyActionFormClass

2.修改RequestUtils中的createActionForm,当设置的ActionForm不是ActionForm的子类时以创建ProxyActionForm

其他:

我做了一个粗略的测试,我的目的都达到了,由于源代码太多,而且没有作最后确定组织方式,因此没有提供。

我想有必要在这里发表一下我对标签使用的标准:尽量少在jsp中写源代码和使用标签,在他们之间找一个平衡,主要目的是增强jsp的可读性,而不是使它没有Code。因此我建议慎用struts的标签,还是使用更标准化的Html元素更安全点

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航