我有一个普通的普通jsp Web应用程序。 并根据客户要求,我需要创建一些带有下拉选择框的配置页面。我必须在Struts 2中创建此页面。 我创建了一个struts页面,但是我无法从现有的应用程序中调用这个struts2页面。
我收到以下错误。
The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)
at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44)
at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:48)
at jsp_servlet.__addprevdn._jsp__tag0(__addprevdn.java:112)
at jsp_servlet.__addprevdn._jspService(__addprevdn.java:84)
Truncated. see log file for complete stacktrace
答案 0 :(得分:1)
正如Umesh Awasthi所说,你不能那样做。您需要了解Struts2的一些基础知识。
HttpServletrequest
首先通过ActionContextCleanUp
过滤器。 ActionContextCleanUp
适用于FilterDispatcher
或StrutsPrepareAndExecuteFilter
,并允许与SiteMesh
集成。FilterDispatcher
调用ActionMapper
来确定哪个请求应该调用Action。它还处理执行操作,清理ActionContext
并提供静态内容,如JavaScript文件,CSS文件,HTML文件等,只要Struts2的各个部分需要它们。ActionMapper
映射HTTP请求&行动调用请求&反之亦然。如果没有动作调用请求匹配,ActionMapper
可以返回动作或返回空值。ActionMapper
想要调用Action时,通过与ActionProxy
交互来调用FilterDispatcher
。 ActionProxy
获取Action类&调用适当的方法。此方法参考框架Configuration Manager,该框架从struts.xml
文件初始化。struts.xml
文件后,ActionProxy
会创建ActionInvocation
&确定应该如何处理行动。ActionProxy
封装了如何获取Action,& ActionInvocation
封装了在调用请求时如何执行Action。ActionProxy
在ActionInvocation
的帮助下调用拦截器。拦截器的主要任务是使用ActionInvocation
。Result
组件生成结果。在Result
映射的Action结果代码的帮助下,模板中的struts.xml
组件查找数据可能包含JSP,FreeMarker用于生成响应。 注意:早期的Struts2开发中使用FilterDispatcher
(org.apache.struts2.dispatcher.FilterDispatcher),自Struts 2.1.3开始就不推荐使用它。
如果您使用Struts版本> = 2.1.3,则始终建议升级新的过滤器类 - StrutsPrepareAndExecuteFilter
(org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)。
一些有用的链接