0

JSP 宣言タグ関数で HTML を直接出力することは合法ですか?

<%! void recursivePaintLevels(List<String> things, int deepLevel){ %>
    <ul class="level-<%=deepLevel%>">   
         <% for (int i=0; i<things.size(); i++){ %>
             <li class="whatever">
                             //(...)
            </li>
         <% } %>
    </ul>
<% } %>

そして、通常の JSP 本体フローで次のように呼び出します。

 //(...)
 <% recursivePaintLevels(things, 1); %>

つまり、暗黙的な out.println() の同じ通常の JSP ロジックをメソッドで使用するようなものです。私にとっては機能していません(Eclipseは「構文エラー、TryStatementを完了するために「最後に」を挿入してください」と言います)が、私のエラーがそれと関係があるかどうかはわかりません。

JSLT と EL を使用する必要があることもわかっていますが、これが私の選択です。

4

2 に答える 2

0

いいえ、合法ではありません。JSP ページは、ページ内のすべてのコードを実行する 1 つの大きなメソッドとして効果的に実装されます。Java では、メソッド内にネストされた他のメソッドを単純に挿入することはできません。

コードは次のようなものを生成します。

public void _jspService(...) {
    ...
    void recursivePaintLevels(...) {
        ...    
    }
}

そして、それは単に合法的なJavaではありません。

代わりに、Web アプリにバンドルされているユーティリティ ライブラリ クラスにコードを委譲する必要があります。

再帰タグファイルを作成できるかもしれませんが、私は試していません。

于 2012-08-15T16:01:49.213 に答える
-1

これは、悪い習慣ではありますが、かなり合法で有効だと思います。ここでの問題は、二重引用符が原因であると思います"level-<%=deepLevel%>"

<% String str= "level-"+deepLevel; %>

次に、を使用します <ul class="<%=str%>">

または、単に行全体をout.printlnに置き換えます

編集

jspのメソッドの本体にはスクリプトレットが含まれていてはならないようです。コンテンツのない1つのスクリプトレットを埋め込もうとしましたが、生成されたJavaファイルが最初の部分(スクリプトレットの前のコンテンツへの削除から)を追加し、最後にメソッドの残りの部分(およびすべてのメンバー変数とその他メソッド宣言はこのメソッドの一部になります)。間違った答えを提供してしまったことをお詫びします(キャッシュされたjspでの動作に気づきました)。

out.prinltnがこの問題の唯一の解決策のようです

于 2012-08-15T16:14:54.680 に答える