struts2 中标签中诡异的错误

wushangjimo 2014-04-22 04:54:29
我拷贝一个新页面,内容删除,就剩一个头部,可是访问这个页面时确保错了,错误原因就是因为<s:a>标签,这个标签在其他页面用过很多次,不是标签库没有导入的问题。先看一下配置文件
<!-- BbsAction配置 -->
<action name="bbs_*" class="bbsAction" method="{1}">
<result name="list">WEB-INF/jsp/bbsaction/list.jsp</result>
<result name="show">WEB-INF/jsp/bbsaction/show.jsp</result>
</action>
<!-- replyAction配置 -->
<action name="reply_*" class="replyAction" method="{1}">
<result name="show">WEB-INF/jsp/replyaction/show.jsp</result>
</action>
下面那个是以上面那个为模板拷贝的,页面也是以上面那个为模板拷贝的,下面是页面代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title></title>
<%@ include file="/WEB-INF/jsp/public/public.jspf" %>
<link rel="stylesheet" type="text/css" href="./style/css/forum.css" />
</head>

<body>
<div class="center">
<div class="nav">
<strong>当前位置</strong>:
<s:a action="bbs_list">BBS</s:a> //去了这一行,或者换成<a>标签就没有错误了
 >> 

</div>
</div>
</body>
</html>


下面是错误提示:
16:45:03,384 ERROR ClosingUIBean:27 - Could not open template
java.lang.NullPointerException
at org.apache.struts2.components.template.TemplateEngineManager.getTemplateEngine(TemplateEngineManager.java:102)
at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:549)
at org.apache.struts2.components.ClosingUIBean.start(ClosingUIBean.java:59)
at org.apache.struts2.components.Anchor.start(Anchor.java:132)
at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:53)
at org.apache.jsp.WEB_002dINF.jsp.replyaction.show_jsp._jspx_meth_s_005fa_005f0(show_jsp.java:117)
at org.apache.jsp.WEB_002dINF.jsp.replyaction.show_jsp._jspService(show_jsp.java:86)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:154)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at fw.oa.util.CheckModuleInterceptor.intercept(CheckModuleInterceptor.java:29)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)

...全文
268 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
daanrk 2015-01-14
  • 打赏
  • 举报
回复
我也遇到这错误了 简直奇葩!!!!
请叫我砖家 2014-04-23
  • 打赏
  • 举报
回复
这种错误很好查,细心就行 空指针一看就是action有的参数没传值 既然楼主已经解决了就好好记住吧
wushangjimo 2014-04-23
  • 打赏
  • 举报
回复
我发现昨天那个错误的原因了,在org.apache.struts2.components.UIBean.mergeTemplate()方法中定义了一个变量theme,并且这个变量名在之后调用的方法中使用了,而我放在map中的那个key也叫theme,可能是它把我那个对象给覆盖了
wushangjimo 2014-04-23
  • 打赏
  • 举报
回复
show()方法出的异常
wushangjimo 2014-04-23
  • 打赏
  • 举报
回复
引用 8 楼 maxldwy 的回复:
能把你action里的bbs_list方法贴出来么?就跟楼上说的你肯定是方法里出现空指针了 写代码的时候注意多加一些异常或者条件判断 用来提高你代码的健壮性
package fw.oa.view;

import java.util.Date;
import java.util.List;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;

import fw.oa.base.BaseAction;
import fw.oa.domain.Reply;
import fw.oa.domain.Theme;
@Controller
@Scope("prototype")
public class ReplyAction extends BaseAction<Reply> {

	private static final long serialVersionUID = 1L;
	private Long themeId;
	
	public String show() throws Exception {
		Theme theme = themeService.findById(themeId);
		List<Reply> replyLists = replyService.findAllByThemeId(theme);
		ActionContext.getContext().put("themes", theme);
		ActionContext.getContext().put("forumId", theme.getForum().getId());
		ActionContext.getContext().put("replyLists", replyLists);
		return "show";
	}
	
	public String save() throws Exception {
		Theme theme = themeService.findById(themeId);
		model.setTheme(theme);
		model.setAuthor(getCurrentUser());
		model.setCreateTime(new Date());
		model.setStory(theme.getReplyNum() + 1);
		model.setStatus('0');
		theme.setReplyNum(theme.getReplyNum() + 1);
		theme.setLastUpdateTime(new Date());
		theme.setLastReply(model);
		replyService.save(model);
		return "toShow";
	}

	public Long getThemeId() {
		return themeId;
	}

	public void setThemeId(Long themeId) {
		this.themeId = themeId;
	}
	
	
	

}
maxldwy 2014-04-23
  • 打赏
  • 举报
回复
引用 6 楼 wushangjimo 的回复:
引用 5 楼 maxldwy 的回复:
引用 3 楼 wushangjimo 的回复:
[quote=引用 2 楼 maxldwy 的回复:] 页面没引用标签?
<%@taglib uri="/struts-tags" prefix="s" %>
这个有,在include里面呢,其他页面也是这么用的,都没有问题
试试<s:a href="bbs_list">BBS</s:a>
这个问题我已经解决了,就是把action中放入map中的一个key的名字改了一下就OK了,但是这个错误有在另一个请求中出现了,一模一样的错误,再怎么改key的名字都不行,真是郁闷死了[/quote] 能把你action里的bbs_list方法贴出来么?就跟楼上说的你肯定是方法里出现空指针了 写代码的时候注意多加一些异常或者条件判断 用来提高你代码的健壮性
wushangjimo 2014-04-23
  • 打赏
  • 举报
回复
引用 5 楼 maxldwy 的回复:
引用 3 楼 wushangjimo 的回复:
引用 2 楼 maxldwy 的回复:
页面没引用标签?
<%@taglib uri="/struts-tags" prefix="s" %>
这个有,在include里面呢,其他页面也是这么用的,都没有问题
试试<s:a href="bbs_list">BBS</s:a>
这个问题我已经解决了,就是把action中放入map中的一个key的名字改了一下就OK了,但是这个错误有在另一个请求中出现了,一模一样的错误,再怎么改key的名字都不行,真是郁闷死了
maxldwy 2014-04-23
  • 打赏
  • 举报
回复
引用 3 楼 wushangjimo 的回复:
引用 2 楼 maxldwy 的回复:
页面没引用标签?
<%@taglib uri="/struts-tags" prefix="s" %>
这个有,在include里面呢,其他页面也是这么用的,都没有问题
试试<s:a href="bbs_list">BBS</s:a>
wushangjimo 2014-04-23
  • 打赏
  • 举报
回复
难道没有人遇到过这样的错误吗?那我也太幸运了吧
wushangjimo 2014-04-23
  • 打赏
  • 举报
回复
已经确定了,不是我代码的问题,就是一个bean的一个属性名和struts后台程序中的名字重复,我更名之后就没有这个问题了,大家以后用的时候也不要用这个变量名了(theme)。 结贴给分
maxldwy 2014-04-23
  • 打赏
  • 举报
回复
引用 11 楼 wushangjimo 的回复:
我发现昨天那个错误的原因了,在org.apache.struts2.components.UIBean.mergeTemplate()方法中定义了一个变量theme,并且这个变量名在之后调用的方法中使用了,而我放在map中的那个key也叫theme,可能是它把我那个对象给覆盖了
找到了就好 换个名吧
wushangjimo 2014-04-22
  • 打赏
  • 举报
回复
引用 2 楼 maxldwy 的回复:
页面没引用标签?
<%@taglib uri="/struts-tags" prefix="s" %>
这个有,在include里面呢,其他页面也是这么用的,都没有问题
maxldwy 2014-04-22
  • 打赏
  • 举报
回复
页面没引用标签?
<%@taglib uri="/struts-tags" prefix="s" %>
wushangjimo 2014-04-22
  • 打赏
  • 举报
回复
江湖救急,在线等,大虾们赶紧出手

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧