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()ます。

applicationRequestDispatcher は経由でアクセスされるため、JSP から渡す必要があります。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 に答える