这次是第一次自己写一个新struts的模块,以前都是在别人基础上修改,下边总结一下遇到的问题及解决。
用的版本是struts1.1。
首先,发现一加上<html:form>标签,就会出错,但网页和服务器上都没有发现异常,只是显示为空白页,后来发现是因为原项目框架中用了重载了Filter的doFilter函数,把异常写进了log,把doFilter的异常捕抓去掉,报出的异常是:doFilter的一些介绍 http://www.matrix.org.cn/resource/article/1/1266.html
org.apache.jasper.JasperException: Cannot retrieve definition for form bean null
解决方法:后来发现确实是<form:bean>和<action>两者间的name属性不一致,修改成一样后正常。
2,异常:No action instance for path /xxxx could be created
解决方法:配置文件struts-config.xml中Action的类名与实际不一致。
这两个简单的问题,几乎卡了我一天,首先是没有报错,后来检查拼写,配置xml文件一定要注意字母的拼写,xml中是大小写敏感的。
3,异常:
javax.servlet.jsp.JspException: Exception creating bean of class xxx.xxxActionForm: {1}
解决方法:发现是包名出错,本来应为,com.sjtu.happier.xxxActionForm,在配置文件中,误为com.sjtu.xxxActionForm
4,异常:
Path zoneMaintain.jsp does not start with a "/" character
解决方法;在struts-config.xml文件中<forward name="success" path="zoneMaintain.jsp" />改为<forward name="success" path="/zoneMaintain.jsp" />
5,问题:关于ActionForm的生存周期问题
默认情况下,ActionForm的scope似乎是被设置成session,因此最好在每次提交时,调用reset方法,或者用session.removeAttribute(配置文件中ActionForm的名字),把ACtionForm从session中删除,否则,得到的ActionForm会是一般新一般旧,但对于scope为request的情况,文章说不用考虑reset,但我发现并不正确,似乎调用reset方法对ActionForm无效,而且,就算是有reset方法,也不是每次载入新页面时就会被调用,具体原因还要再试试,到时了解透再发文章。
一般错误可以在以下找到:http://www.blogjava.net/soochow_hhb/archive/2005/06/11/5905.aspx
最后说一下使用struts的一些技巧:
1,为ActionForm设置reset函数并适时调用,默认情况下,ActionForm的生命周期是session,因此如果不调用reset初始化,往往会导致半旧半新数据,具体如下文:http://www.80x86.cn/blog/blogview.asp?logID=1307
2,可以在定义一个interface作为网页上标记的常量,例如:
<logic:notEmpty name="<%=Constants.TAG_SEARCH_RESULT%>">
3,另外发现,weblogic和Tomcat上部署程序,会有区别,在Tomcat能跑得,在Weblogic会有问题,以后有空把两者区别总结一下。