如何定制struts以适应自己的需求
背景资料:
本人开始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元素更安全点