论坛首页 Java版 Struts

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

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

<form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="user" type="org.layout.model.User"/>
</form-bean>
[/code:1]
在校验文件validation.xml中:
[code:1]
<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>

[/code:1]
在action中如下调用:
[code:1]
        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());
[/code:1]
其实这样子的集成感觉很不错的,除了少了dto和转换(至少你要用一个copyProperty吧),pojo实现了序列化,甚至可以直接深入到Hibernate底层,这样子就省缺了以前一直讨论formbean和po是不是合并或者在哪个层面上进行转换。
Archie 写道
http://www.theserverside.com/articles/article.tss?l=StrutsLiveCh10 :lol:
   
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版 Struts

跳转论坛:
JavaEye推荐