代码改变世界

11月25日struts培训日记

2006-11-28 14:55  java ee spring  阅读(133)  评论(0编辑  收藏  举报

今天对struts的一些细节进行了详细讲解:
一个ActionMapping对象对应struts-config.xml文件中的一个<action>元素,读ActionMapping类的API帮助文档,通过各个setter/getter方法,即可了解<action>元素的各个属性的意义。
<action>元素的input属性可以指向一个logon.do这样的url,而不仅限于.jsp页面。
<action>元素的unknown属性的作用
讲解了ForwardAction的应用:
    <action parameter="/WEB-INF/jsp/logon.jsp" path="/index" type="org.apache.struts.actions.ForwardAction"/>
    <!-- action forward="/WEB-INF/jsp/logon.jsp" path="/index" /-->
   通过上面的分析,请学员们回答为什么type属性与forward属性不能同时出现?
讲解了DispatchAction的应用,提问:如果覆盖DispatchAction的execute方法,将有什么效果?
分析了ActionFormBean与ActiornForm之间关系。

讲解了表单校验错误和业务逻辑校验错误的处理流程
1. 请求参数-->ActionForm-->ActionForm.validate-->表单校验错误则返回errors-->logon.jsp-->显示出错误信息
   问题:要把errors存储在request中,谁存储的?
2.请求参数-->ActionForm-->ActionForm.validate-->表单校验成功则调用Action.execute方法
    -->逻辑校验错误-->产生errors-->回logon.jsp显示错误信息
   问题:这时候,谁把erros存储到request中?怎么存?在存储错误时,应该使用request.setAttribute("特殊属性名",erros);存入的属性名是一个固定的特殊名称,这样<html:errors>才能使用这个属性名从请求域中取错误。这个固定的特殊属性名是什么?如果记就太痛苦,那就让saveErrors来帮忙吧。讲课时先演示了直接使用request.setAttribute的情况,然后再使用saveErrors。

错误提示信息和普通信息都用ActionMessage,ActionMessage即代表错误,也代表消息。一个Message本身不是什么错误,只是我们把它的信息当作错误提示信息,还是当作普通信息来看罢了。使用saveErrors储存的ActionMessages对象表示错误,即以Globals.ERROR_KEY作为属性名进行存储,使用saveMessage存储的ActionMessage对象代表普通消息,即以Globals.MESSAGE_KEY作为属性名进行存储。
分析了ActionMessages内部的存储结构,同一字段名可以对应多条ActionMessage,例如:
errors.addMessage("age",new ActionMessage("error.age"));
errors.addMessage("age",new ActionMessage("error.old"));
有一特殊字段名ActionMessages.GLOBAL_MESSAGE,代表全局错误信息。 

struts中提供的防止表单重复提交与取消提交的原理与应用。取消操作向Session域中存储一个特殊属性,其他操作在处理过程可以检索这个属性,如果检索到了则执行取消操作。