您的位置:首页 > 运维架构 > Apache

J2EE轻量级开发中的Form异常

2009-07-19 20:30 281 查看
最近一直都在做OA项目,有个问题一直困扰我,我刚建立的项目,每次修改过其中页面或者数据库中的数据后,刷新后就报这种异常,更可恶的是每次点击页面上的修改并修改原有的数据时,在点击提交按钮后都是进入增加程序。

 

Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: javax.servlet.ServletException: java.lang.NoSuchFieldError: deferredExpression

    org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)

    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)

    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    cn.itcast.oa.filter.CloseSessionFilter.doFilter(CloseSessionFilter.java:29)

root cause

javax.servlet.ServletException: java.lang.NoSuchFieldError: deferredExpression

    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:275)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)

    org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)

    org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)

    org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)

    org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)

    org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)

    org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)

    org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)

    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)

    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    cn.itcast.oa.filter.CloseSessionFilter.doFilter(CloseSessionFilter.java:29)

root cause

java.lang.NoSuchFieldError: deferredExpression

    org.apache.taglibs.standard.tag.common.core.ForEachSupport.release(ForEachSupport.java:178)

    org.apache.jasper.runtime.TagHandlerPool.release(TagHandlerPool.java:166)

    org.apache.jsp.WEB_002dINF.page.user.save_jsp._jspDestroy(save_jsp.java:55)

    org.apache.jasper.runtime.HttpJspBase.destroy(HttpJspBase.java:61)

    org.apache.jasper.servlet.JspServletWrapper.destroy(JspServletWrapper.java:425)

    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:139)

    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)

    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)

    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)

    org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)

    org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)

    org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)

    org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)

    org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)

    org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)

    org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)

    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)

    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    cn.itcast.oa.filter.CloseSessionFilter.doFilter(CloseSessionFilter.java:29)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.

 

 

看看上面的异常信息得知这个异常是由于不能解析<c:forEach>标签中的内容,看看这个jsp页面,标签引入没有任何异常,由于原来使用断点测试发现在提交修改信息时总是进入增加程序,这个问题真是的好好分析一下。

先看看form中的内容

<html:hidden property="method"   value="${roseForm.id gt 0 ? 'edit' : 'add'}" />  

这个程序的编辑页面和增加页面使用的是同一个页面,正提交信息时程序将依据Form信息自动判断进入的页面,该提交内容总是进入增加页面说明该信息roseFrom.id总是不大于0,而使程序一直选择add.那莫非该formbean出问题了,在进入struts-configuration中检查一下,问题果然出在这里。

<form-bean name="role" type="cn.itcast.oa.form.RoleForm"/>

看看这个配置,明明是role,而页面中用的确实roleForm,原来在struts1.x中,一般情况下每个form都要对应一个formbean,而且这个formbean还要正确的配置与调用。

 

这个调用又和<c:forEach>有什么关系呢,让我们再来看看这个这个标签中的内容:

<c:forEach items="${roles}" var="role">

 <html:multibox property="rolesId" value="${role.id}" />${role.name}

</c:forEach>

 

怪不的会出现解析异常,原来这里调用了role,而这个正是那个配置bean文件中的name的值。

现在已经改过来了,发现这两个问题都不在出现了。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息