Struts 2 s:包含标记不适用于头jspf文件

时间:2014-12-01 00:42:33

标签: java jsp struts2 jspinclude struts-config

我有index.jsp,其中包含header.jspf,主要内容和页脚jspf。我使用s include来包含页眉和页脚jspf。

我的标题jspf包含带有param值的surl标记。我在其中包含了s taglib。

我的index.jsp / header.jspf都包含taglib声明。

<%@taglib prefix="s" uri="/struts-tags"%>

我的标题操作文件如下所示,

public class Header extends ActionSupport {

    public Header() {
    }

    @Override
    public String execute() throws Exception {
         return SUCCESS ;
    }

}

我的struts xml声明如下

  <action name="Header" class="org.mypackage.mypackagename.Header" method="execute" > 
            <result name="SUCCESS">/WEB-INF/views/header/header.jspf</result>
            <result name="error">/WEB-INF/views/error-page.jsp</result>
        </action>

在索引jsp中,我包括jspf as,

  <s:include value="/WEB-INF/views/header/header.jspf"/>

但由于某些原因,它永远不会起作用,它会在标题部分显示源代码/破坏的html。我在index.jsp中也有struts 2 html标签,看起来效果很好。

相同的设置适用于不受欢迎页面的子页面。

我是否需要使用prepare接口来包含头jspf。我的页脚jspf不包含任何struts标签,所以可能它似乎工作正常。

我无法看到这里发生什么,所以需要一些其他的想法。

索引jsp在web xml中被声明为welcomme页面。

2 个答案:

答案 0 :(得分:1)

如果Head只是一个JSP片段,并且您的真实整页是Index.jsp,那么您应该将那个页面映射到一个Action,而不是片段本身:

的index.jsp

<!DOCTYPE html>
<html>
    <head>
        <s:include value="/WEB-INF/views/header/header.jspf"/>
    </head>
    <body>
        <h2> This is Index.jsp </h2>

        <s:include value="/WEB-INF/views/header/footer.jspf"/>
    </body>
</html>

Struts.xml

<action name="Login" class="org.mypackage.mypackagename.Login" method="execute">
    <result name="success">/WEB-INF/views/login.jsp</result>
    <result name="error">/WEB-INF/views/error-page.jsp</result>
</action>

请注意"SUCCESS"错误:它应该是"success"Action.SUCCESS(一个常量,也在ActionSupport中,映射到"success")。

答案 1 :(得分:1)

使用sitemesh或tile进行页面装饰,如页眉和页脚等.Trememesh是我推荐的。它与struts2无关,不需要创建页眉和页脚struts2动作来实现这一点。

您可以在网上搜索sitemesh + struts2的实现。

如果你不愿意检查sitemesh或任何其他装饰框架,最好创建页眉和页脚jsp或html并在index.jsp中包含(jsp:inlcude标签)或者你想要显示标题的jsp和页脚。