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

来源:互联网 发布:常德市优化办工作人员 编辑:程序博客网 时间:2024/05/22 13:29
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

背景资料: 本人开始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元素更安全点

 

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>