0

Faceletsを使用して静的HTMLプロトタイプを作成したいと思います。このプロトタイプは、TomcatなどのWebアプリケーションサーバーを実行していない人に送信されます。ビルド時に(Antなどを使用して)FaceletsサイトをフラットなHTMLファイルのセットにコンパイルする方法はありますか?

最も単純なケースでは、次のような2つのファセットがあります。

<!-- layoutFacelet.xhtml -->
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:insert name="content" />
</ui:composition>

<!-- implementationFacelet.xhtml -->
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  template="layoutFacelet.xhtml">
    <ui:define name="content">
        HELLO WORLD
    </ui:define>
</ui:composition>

出力は、次のような単一のhtml(たとえば、「implementationFacelet.output.html」)になります。

HELLO WORLD

つまり、静的フラットファイルプロトタイプを作成するために、Faceletsはレンダリング時ではなくビルド時に実行されます。

4

1 に答える 1

0

私はあなたの問題のすぐに使える解決策についてはよくわかりません。ただし、ビルド時のJSF ELバリデーターに取り組んでいるおかげで、どのように実装できるかについてはかなり良い考えがあります。現在、ファセットのサポートを追加しています。私はこれをします:

  1. EL式で使用されるバッキングBeanなどを設定します。これを行うには複数の方法があります。個人的には「値を偽造するELリゾルバー」をプラグインすることを検討しますが、JSFがバッキングBeanを見つけられることを確認するだけでもかまいません。どういうわけか、必要なすべての値が設定されていることを確認してください
  2. ビューを手動でコンパイルし、そのコンポーネントツリーを構築します(実装-ExperimentalFaceletsElFinder.verifyExpressionsViaComponentTreeを参照
  3. UIViewRoot.encodeAll(context)を介してコンポーネントツリーをHTMLにレンダリングします-org.apache.myfaces.view.facelets.FaceletViewHandler#renderViewを参照してください

したがって、これは実行可能ですが、これまでこれらの作業を行ったことがない人にとっては、おそらく多すぎる作業です。Faceletsのサポートが完了したら、そのときは非常に簡単なので、バリデーターにそのような機能を追加することを検討します。

よろしく、ヤクブ

于 2011-10-28T11:22:16.507 に答える