2

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

在高层次上,我有一个 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 作为字符串读取并传递它,但这对内存来说非常沉重,所以我想避免这种情况。

4

3 回答 3

6

使用RequestDispatcher.include()myhtml().

你需要application从你的 JSP 中传入,因为 RequestDispatcher 是通过ServletContext.getRequestDispatcher()

应用程序是一个 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 的回答,您可以根据自己的代码编写方式做出选择。

于 2013-04-11T21:43:01.250 回答
1

传递给您的render.myhtml()方法的编写器是 HTTP 响应的编写器。你写给这个作家的所有东西都照原样进入浏览器。

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

要做你想做的事,请参阅Paul Grime 的回答

于 2013-04-11T21:43:35.057 回答
0

错误的解释在JB Nizet answer中有详细说明。

如果你想动态包含一个jsp,<jsp:include>你应该只动态设置你想要包含的页面的名称。基本示例:

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

public String myhtml() {
    return "/path/test.jsp";
}
于 2013-04-11T21:43:08.807 回答