Web アプリケーションの出力を生成する Java クラス (TagSupport を拡張) を持つカスタマイズされた JSP タグ ライブラリがあります。を使用して HTML コードに形成されるパラメータがいくつかありますStringBuilder
。
現在、生成された HTML は複雑になり、 の呼び出しでは処理が難しくなってきてStringBuilder.append
いるため、コード生成をFreemarker template
.
component
Struts タグは既に Freemarker テンプレート ファイルを使用しているため、代わりに一般的な Struts タグを使用できることがわかったので、次のようなタグを記述できます。
<s:component template="/components/myStruct.ftl">
<s:param name="myParam" value="%{'myParam'}" />
</s:component>
次に、指定されたテンプレート ファイルを作成するmyStruct.ftl
と、おそらく問題が解決するでしょう。Struts が実際にそのファイルを正しく検出して使用するかどうかは実際には試していませんが、楽観的には動作することを期待しています。
私の質問は、カスタマイズされたタグで現在のコードを保持することも可能かどうかです
<my:struct param="myParam" />
そのタグにリンクされた Java クラスのみを変更します。
Freemarker テンプレートを読み取るコードを見つけました。
Configuration config = FreemarkerManager.getInstance().getConfiguration(pageContext.getServletContext());
config.setServletContextForTemplateLoading(pageContext.getServletContext(), "/components");
Template templ = config.getTemplate("myStruct.ftl");
templ.process(params, pageContext.getOut());
しかし、それは私には非常に遠回しに思え、それを行うための「標準的な」方法は何だろうと思いました。さらに、このように使用されるテンプレートでは、Struts タグ ライブラリのタグを使用できないようです。(私は...ArrayIndexOutOfBoundException
が原因でに遭遇しましたSitemesh
。まだ分析していません。)
私の意図は、Java クラスを、Struts コンポーネント タグを囲むある種のラッパーとして維持することでした。たぶん次のようなものです:
OgnlValueStack stack = TagUtils.getStack(pageContext);
Component c = new Component(stack);
c.addParameter("param", param);
しかし、このコード スタブを続行する方法がわかりません。どう見てもクズかもしれません。
これを行うための簡単な「標準的な」方法はありますか、それともカスタマイズされたタグを単に取り除く必要がありますか?
前もって感謝します。