如何将jsp从Java代码插入到另一个jsp中
我正在处理遗留代码,所以请不要开始“为什么要这样做”,我知道这是一个糟糕的实现,所以让我们跳过它 在高层,我有一个JSP如何将jsp从Java代码插入到另一个jsp中,java,jsp,Java,Jsp,我正在处理遗留代码,所以请不要开始“为什么要这样做”,我知道这是一个糟糕的实现,所以让我们跳过它 在高层,我有一个JSP <html:form action="/myAction" method="POST" onsubmit="beforeSubmit()"> ... <table class="dialog"> <% render.myhtml(out); %> </table> ...
<html:form action="/myAction" method="POST" onsubmit="beforeSubmit()">
...
<table class="dialog">
<% render.myhtml(out); %>
</table>
...
</html>
...
...
java代码中的render.myhtml(out)如下所示(我尝试了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);
...
}
public void myhtml(Writer w)引发IOException{
....
字符串include=“”;
//字符串include=“”;
println(w,包括);
...
}
但是当我打开页面时,我看不到include..源代码显示它正在打印include标记,但没有对其求值:
<table class="dialog">
...
<jsp:include page="/path/test.jsp" />
</table>
...
所以在我看来,这个插入是在对包含项进行评估之后发生的。所以问题是..我能做些什么来实现这一点呢?我曾经考虑过将JSP作为字符串读取并传递它,但这会占用大量内存,所以我想避免这种情况。在myhtml()
中使用
您需要从JSP传入应用程序,因为RequestDispatcher是通过
应用程序是一个JSP隐式对象:
编辑
JSP:
我也喜欢@Luiggi的答案,你可以根据你想如何编写代码来选择。错误的详细解释见
如果要使用
动态包含jsp,只需动态设置要包含的页面名称即可。基本示例:
<table class="dialog">
<jsp:include page="<%= render.myhtml() %>" />
</table>
传递给render.myhtml()
方法的writer是HTTP响应的writer。您向该writer写入的所有内容都会按原样进入浏览器
JSP是一种服务器端技术。它是在服务器端编译和执行的。浏览器对JSP包含的内容一无所知。因此,将JSP代码写入HTTP响应编写器是没有意义的
若要执行您想要执行的操作,请参阅。我正在处理遗留代码,因此请不要开始“为什么要这样做”,我知道这是一个糟糕的实现,所以让我们跳过这一点,很高兴知道您知道这是错误的,但您必须接受它。谢谢Paul,但您能否对RequestDispatcher.include()的使用更具体一点要呈现include以及如何在jsp中检索include?请注意,传递请求和响应就足够了,因为可以使用request.getServletContext()访问servlet上下文
@JB-是的,观点很好。我将原封不动地展示JSP可用的3个隐式变量,但你说得很对。是的,我也这么想,但问题是render.myhtml()作为“…”表示的内容、字段等要多得多,它还可能包含多个include。@user1994202如果是这种情况的话(你的问题中没有说明)使用
public void myhtml(ServletContext sc, ServletRequest req, ServletResponse res) throws IOException {
....
RequestDispatcher rd = sc.getRequestDispatcher(myobject.getPage());
rd.include(req, res);
...
}
<table class="dialog">
<jsp:include page="<%= render.myhtml() %>" />
</table>
public String myhtml() {
return "/path/test.jsp";
}