Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 调用分幅时putAttribute中的NPE_Apache_Tomcat_Struts2_Tiles - Fatal编程技术网

Apache 调用分幅时putAttribute中的NPE

Apache 调用分幅时putAttribute中的NPE,apache,tomcat,struts2,tiles,Apache,Tomcat,Struts2,Tiles,我试图学习Struts2 f/w与tiles集成,但在实现时,我在putAttributeTag中获得了NPE 单击“登录”后,我需要移动到主页,但打开主页时出现异常 下面是一些相关的代码 struts.xml <package name="default" extends="struts-default" namespace="/"> <result-types> <result-type name="dispatcher" class="

我试图学习Struts2 f/w与tiles集成,但在实现时,我在putAttributeTag中获得了NPE

单击“登录”后,我需要移动到主页,但打开主页时出现异常

下面是一些相关的代码

struts.xml

<package name="default" extends="struts-default" namespace="/">
    <result-types>
        <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
        <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"></result-type>
    </result-types>


    <action name="signin" class="actions.SigninAction" method="execute">
        <result name="success" type="tiles">home</result>
    </action>

</package>
堆栈跟踪

org.apache.tiles.TilesException: ServletException including path '/baseLayout.jsp'.
    org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:614)
    org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:246)
    org.apache.struts2.views.tiles.TilesResult.doExecute(TilesResult.java:105)


如果您能指出我的错误就好了。

NPE的原因是在
baseLayout
中,我使用了
puttribute
标记,而不是
insertAttribute

<div id="content" class=".content">
    <tiles:putAttribute name="content"></tiles:putAttribute>
</div>

当计算该
puttribute
时,则缺少
value
参数。因此,导致投掷NPE

修正: 使用
insertAttribute
标记,因为我们将获取值并将其插入
baselayout

还有一些我在经历之后改变的事情如下:

  • Jsp的名称以大写字母开头
  • 在平铺定义中,
    .tiles
    用作来自其他视图技术的平铺定义的标记
  • 另外,在平铺定义名称之前加入斜杠
    /
    ,并相应地调整
    struts.xml

  • 我做了几处修改,解决了这个问题。我犯了n个错误。
    ServletException including path '/baseLayout.jsp'.
    ServletException including path '/baseLayout.jsp'.
    
    org.apache.tiles.TilesException: ServletException including path '/baseLayout.jsp'.
        org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:614)
        org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:246)
        org.apache.struts2.views.tiles.TilesResult.doExecute(TilesResult.java:105)
    
    org.apache.tiles.util.TilesIOException: ServletException including path '/baseLayout.jsp'.
        org.apache.tiles.servlet.context.ServletTilesRequestContext.wrapServletException(ServletTilesRequestContext.java:298)
        org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:200)
        org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:179)
        org.apache.tiles.context.TilesRequestContextWrapper.dispatch(TilesRequestContextWrapper.java:72)
    
    java.lang.NullPointerException
        org.apache.tiles.jsp.taglib.PutAttributeTag.execute(PutAttributeTag.java:204)
        org.apache.tiles.jsp.taglib.RoleSecurityTagSupport.doEndTag(RoleSecurityTagSupport.java:75)
        org.apache.jsp.baseLayout_jsp._jspx_meth_tiles_005fputAttribute_005f0(baseLayout_jsp.java:188)
        org.apache.jsp.baseLayout_jsp._jspService(baseLayout_jsp.java:129)
    
    <div id="content" class=".content">
        <tiles:putAttribute name="content"></tiles:putAttribute>
    </div>