如何将jsp从java代码插入到另一个jsp中

时间:2013-04-11 21:34:40

标签: java jsp

我正在研究遗留代码所以请不要开始“你为什么这样做”,我知道这是一个糟糕的实现,所以让我们跳过它。

在高级别我有一个JSP

<html:form action="/myAction" method="POST" onsubmit="beforeSubmit()">
...
        <table class="dialog">
            <% render.myhtml(out); %>
        </table>
...
</html>

render.myhtml(out)在java代码中如下(我试过jsp:include和@include:

public void myhtml(Writer w) throws IOException {
....
        String include = "<jsp:include page=" +"\"" +myobject.getPage() +"\"" + " />";
      //String include = "<%@ include file=" +"\"" +myobject.getPage() +"\"" + " %>";
        println(w, include);
...
}

但是当我打开页面时,我看不到包含..源代码显示它正在打印包含标签但未对其进行评估:

<table class="dialog">
    ...
    <jsp:include page="/path/test.jsp" />
</table>

所以在我看来,这个插入是在评估包含物之后发生的。所以问题是......我能做些什么来使这个工作?我已经考虑过将JSP作为字符串读取并传递它,但这对内存非常重要,所以我想避免这种情况。

3 个答案:

答案 0 :(得分:6)

myhtml()中使用RequestDispatcher.include()

您需要从JSP传递application,因为通过ServletContext.getRequestDispatcher()

访问RequestDispatcher

Application是一个JSP隐式对象:http://www.tutorialspoint.com/jsp/jsp_implicit_objects.htm

修改

JSP:

<html:form action="/myAction" method="POST" onsubmit="beforeSubmit()">
...
        <table class="dialog">
            <% render.myhtml(application, request, response); %>
        </table>
...
</html>

爪哇:

public void myhtml(ServletContext sc, ServletRequest req, ServletResponse res) throws IOException {
....
        RequestDispatcher rd = sc.getRequestDispatcher(myobject.getPage());
        rd.include(req, res);
...
}

我也很喜欢@Luiggi的答案,你可以根据自己的编码方式做出选择。

答案 1 :(得分:1)

传递给render.myhtml()方法的编写者是HTTP响应的编写者。你写给这位作家的一切都按原样进入浏览器。

JSP是一种服务器端技术。它在服务器端编译和执行。浏览器对JSP包含的内容一无所知。因此,将JSP代码编写到HTTP响应编写器是没有意义的。

要执行您想要执行的操作,请参阅Paul Grime's answer

答案 2 :(得分:0)

错误的解释详见JB Nizet answer

如果要使用<jsp:include>动态包含jsp,则应该动态设置要包含的页面的名称。基本示例:

<table class="dialog">
    <jsp:include page="<%= render.myhtml() %>" />
</table>

具有

public String myhtml() {
    return "/path/test.jsp";
}