论坛首页 Java企业应用论坛

在tss上看到一篇文章,讲struts的ActionForm和POJO如何在一...

浏览 3568 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-12-31  
http://www.theserverside.com/articles/article.tss?l=StrutsLiveCh10
   发表时间:2005-01-02  
看看我的集成,在struts-config.xml中定义formbean:

		<form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
			<form-property name="user" type="org.layout.model.User"/>
		</form-bean>

在校验文件validation.xml中:
		<form name="loginForm">
			<field property="user.name" depends="required,minlength,maxlength">
				<arg0 key="label.username"/>
				<arg1 key="${var:minlength}" name="minlength" resource="false"/>
				<arg2 key="${var:maxlength}" name="maxlength" resource="false"/>
				<var>
					<var-name>maxlength</var-name>
					<var-value>16</var-value>
				</var>
				<var>
					<var-name>minlength</var-name>
					<var-value>2</var-value>
				</var>
			</field>
			<field property="user.password" 
				depends="required,minlength,maxlength">
				<arg0 key="label.password"/>
				<arg1 key="${var:minlength}" name="minlength" resource="false"/>
				<arg2 key="${var:maxlength}" name="maxlength" resource="false"/>
				<var>
					<var-name>maxlength</var-name>
					<var-value>16</var-value>
				</var>
				<var>
					<var-name>minlength</var-name>
					<var-value>2</var-value>
				</var>
			</field>
		</form>


在action中如下调用:
        DynaActionForm aForm = (DynaActionForm);form;
        ActionMessages messages = form.validate(mapping, request);;
        if(!messages.isEmpty(););
        {
            saveMessages(request, messages);;
            return mapping.findForward("prompt");;
        }
        User user = (User);aForm.get("user");;
        UserDAO userDAO = (UserDAO);getWebApplicationContext();.getBean("userDAO");;
        user = userDAO.get(user.getName();, user.getPassword(););;

其实这样子的集成感觉很不错的,除了少了dto和转换(至少你要用一个copyProperty吧),pojo实现了序列化,甚至可以直接深入到Hibernate底层,这样子就省缺了以前一直讨论formbean和po是不是合并或者在哪个层面上进行转换。
Archie 写道
http://www.theserverside.com/articles/article.tss?l=StrutsLiveCh10
0 请登录后投票
   发表时间:2005-01-02  
楼上的答复好象跟文章内容不相干吧,文章是讨论怎么与含有非string类的属性的POJO的集成
0 请登录后投票
   发表时间:2005-01-03  
macher 写道
楼上的答复好象跟文章内容不相干吧,文章是讨论怎么与含有非string类的属性的POJO的集成

不好意思,没有仔细看那篇文章就乱发言了。看了题目是集成pojo和actionForm就跑了。。。

我看了那篇文章,确实讨论的与pojo集成的过程中遇到的一些属性转化的问题和解决建议。但是感觉作者的解决方案是不是过于繁琐,如果能够在校验中定义好校验的mask,在setProperty的时候动态检查一遍propety的类型并且把request中传递过来的值进行转换(可以检查到如果非string就动态转化一边),如果在convert的过程中出现错误就保存到对应的一个error的message中(类似于生命周期在request过程中的一个map)并继续转化下一个property直到完成.....

其实问题在于转化失败的时候怎样cache住这个值并且返回到输入页面显示出来。
0 请登录后投票
   发表时间:2005-01-03  
此外,我现在项目里面处理类似问题的时候是额外的进行判断。使用DynaValidatorForm加上内嵌pojo,如果有date或者其他的不可直接set的属性就在DynaValidatorForm里面增加一个属性,然后在action中进行判断和转化给DynaValidatorForm.pojo
到目前为止还没有出现问题,当然我不肯定是最好的解决方案。不过我觉得DynaValidatorForm还是很有用场的。
macher 写道
楼上的答复好象跟文章内容不相干吧,文章是讨论怎么与含有非string类的属性的POJO的集成
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics