0

ValueStack我使用以下代码在我的拦截器的拦截方法内的 Struts2 中放置了一个对象:

public String intercept(ActionInvocation invocation)
    ValueStack vS = invocation.getStack();
    vS.set("mainViewComponent", new MainViewComponent());
    ...
}

我尝试使用此代码在 jsp 上检索它

<s:property value="#mainViewComponent.contextPath" />

但是抛出了这个异常

Caused by: java.io.IOException: JSPException including path '/_common/layout/fragments/httpHeader.jsp'.
at org.apache.tiles.request.servlet.ServletUtil.wrapServletException(ServletUtil.java:61) [:1.0.1]
at org.apache.tiles.request.jsp.JspRequest.doInclude(JspRequest.java:125) [:1.0.1]
at org.apache.tiles.request.AbstractViewRequest.dispatch(AbstractViewRequest.java:47) [:1.0.1]
at org.apache.tiles.request.render.DispatchRenderer.render(DispatchRenderer.java:45) [:1.0.1]
at org.apache.tiles.request.render.ChainedDelegateRenderer.render(ChainedDelegateRenderer.java:68) [:1.0.1]
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:259) [:3.0.1]
at org.apache.tiles.TilesContainerWrapper.render(TilesContainerWrapper.java:108) [:3.0.1]
at org.apache.tiles.template.InsertAttributeModel.renderAttribute(InsertAttributeModel.java:188) [:3.0.1]
at org.apache.tiles.template.InsertAttributeModel.execute(InsertAttributeModel.java:132) [:3.0.1]
at org.apache.tiles.jsp.taglib.InsertAttributeTag.doTag(InsertAttributeTag.java:299) [:3.0.1]
at org.apache.jsp._005fcommon.layout.base_jsp._jspx_meth_tiles_005finsertAttribute_005f0(base_jsp.java:161)
at org.apache.jsp._005fcommon.layout.base_jsp._jspService(base_jsp.java:72)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) [:6.1.0.Final]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [:1.0.0.Final]
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) [:6.1.0.Final]
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:326) [:6.1.0.Final]
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:253) [:6.1.0.Final]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [:1.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.1.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [:6.1.0.Final]
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:541) [:6.1.0.Final]
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) [:6.1.0.Final]
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) [:6.1.0.Final]
at org.apache.tiles.request.servlet.ServletRequest.forward(ServletRequest.java:265) [:1.0.1]
... 88 more
Caused by: source is null for getProperty(null, "contextPath") - Class: ognl.OgnlRuntime
File: OgnlRuntime.java
Method: getProperty
Line: 2310 - ognl/OgnlRuntime.java:2310:-1
at com.opensymphony.xwork2.ognl.OgnlValueStack.handleOgnlException(OgnlValueStack.java:331) [:2.3.14.2]
at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:309) [:2.3.14.2]
at org.apache.struts2.components.Property.start(Property.java:159) [:2.3.14.2]
at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:53) [:2.3.14.2]
at org.apache.jsp._005fcommon.layout.fragments.httpHeader_jsp._jspx_meth_s_005fproperty_005f0(httpHeader_jsp.java:118)
at org.apache.jsp._005fcommon.layout.fragments.httpHeader_jsp._jspService(httpHeader_jsp.java:70)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) [:6.1.0.Final]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [:1.0.0.Final]
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) [:6.1.0.Final]
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:326) [:6.1.0.Final]
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:253) [:6.1.0.Final]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [:1.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.1.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [:6.1.0.Final]
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:639) [:6.1.0.Final]
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:576) [:6.1.0.Final]
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968) [:6.1.0.Final]
at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:650) [:6.1.0.Final]
at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:644) [:6.1.0.Final]
at org.apache.tiles.request.jsp.JspRequest.doInclude(JspRequest.java:123) [:1.0.1]
... 111 more
Caused by: ognl.OgnlException: source is null for getProperty(null, "contextPath")
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2310) [:]
at ognl.ASTProperty.getValueBody(ASTProperty.java:114) [:]
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) [:]
at ognl.SimpleNode.getValue(SimpleNode.java:258) [:]
at ognl.ASTChain.getValueBody(ASTChain.java:141) [:]
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) [:]
at ognl.SimpleNode.getValue(SimpleNode.java:258) [:]
at ognl.Ognl.getValue(Ognl.java:494) [:]
at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:255) [:2.3.14.2]
at com.opensymphony.xwork2.ognl.OgnlValueStack.getValue(OgnlValueStack.java:356) [:2.3.14.2]
at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValue(OgnlValueStack.java:345) [:2.3.14.2]
at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValueWhenExpressionIsNotNull(OgnlValueStack.java:321) [:2.3.14.2]
at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:307) [:2.3.14.2]
... 130 more

有人能理解问题出在哪里吗?

4

1 回答 1

0

在 JSP 中,您已包含标头片段,但用于获取资源的 URL 不起作用,因为它包含无法评估的 OGNL 表达式,因为它引用了null对象。

现在我看到你发布了你是否检索了 URL

<s:property value="#mainViewComponent.contextPath" />

错误是#mainViewComponent引用了该ActionContext属性,这是null因为您没有将对象放入其中,但是您将其放入了valueStack应该得到 的

<s:property value="mainViewComponent.contextPath" />
于 2013-08-09T11:12:31.080 回答