1

TinyMCEとJSF2.xでソリューションを実装しようとしています。ただし、どのように進めるかはわかりません(さまざまなアプローチ)。

私がやろうとしていること...

ログイン後にTinyMCEを介して編集できる特定の編集可能な領域/セクションを使用して、ユーザーテンプレート(Faceletsファイル)を作成します。

DBを使用して「編集可能な」パーツを保存したり、Faceletsテンプレートに動的に挿入したりしたくありません。

私はこのようにsommethingを考えていました。

  1. 編集可能なコンテンツをTinyMCEにロードします。
  2. ユーザーがコンテンツを更新します。
  3. 送信時に、XML処理用のJavaAPIまたはその他のxml/xhtmlパーサーを使用してコンテンツを検証します。
  4. Faceletsテンプレートを読み、編集可能なコンテンツを送信されたコンテンツに置き換えます。
  5. 古いFaceletsファイルを新しいFaceletsファイルに置き換えて保存します。

変更を行う前に、中間ステップを使用して、送信されたコンテンツをFaceletsファイルに事前に保存する必要がありますか?これをどのように進めるかについての他のアイデアをいただければ幸いです。

4

3 に答える 3

2

DB を使用して「編集可能な」パーツを保存したり、Facelets テンプレートに動的に挿入したりしたくありません。

次に、実行可能な唯一のオプションは、それらをローカル ディスク ファイル システムに保存することです。それらを WAR の deploy フォルダーに保存することはできますし、保存すべきではありませんが、WAR の外にあることに注意してください。そうしないと、すべての変更が再デプロイ中または単純なサーバーの再起動中に失われます。さらに、WAR をディスクではなくメモリに展開するようにサーバーが構成されている場合は、ファイルを書き込むことができません。

WAR の外にファイルを保存するのは簡単です。FileOutputStreamこのファイルの a に書き込むだけです:

new File("/some/base/path", filename);

Facelets を取得して WAR の外部からリソースを解決するには、次のカスタムが必要ResourceResolverです。

public class MyResourceResolver extends ResourceResolver {

    private ResourceResolver parent;

    public MyResourceResolver(ResourceResolver parent) {
        this.parent = parent;
    }

    @Override
    public URL resolveUrl(String path) {
        URL url = parent.resolveUrl(path); // Resolves from WAR.

        if (url == null) {
            url = new File("/some/base/path", path).toURI().toURL();
        }

        return url;
    }

}

に次のように登録する必要がありますweb.xml

<context-param>
    <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
    <param-value>com.example.MyResourceResolver</param-value>
</context-param>
于 2013-02-01T11:15:10.857 に答える
1

Xhtml ファイルはデフォルトで WAR 内に配置されます。展開された WAR をデプロイして、その場で保存できます。ただし、再デプロイすると、すべての変更が失われます。

JSF を「ハッキング」して WAR アーカイブ外のテンプレートを探すこともできますが、これは難しい場合があります。

JSFに固執する必要がありますか? コンポーネント ベースのサーバー側テクノロジは、最適な選択ではありません。このようなソリューションには、Spring MVC や Grails などのテンプレート ベースのコントローラー ファースト テクノロジを使用することをお勧めします。JSF では、フローを制御するのは XHTML ページであることに注意してください。それは単なるテンプレート技術ではありません。

また、これが CMS システムが発明された理由であることに注意してください。

于 2013-02-01T09:21:05.977 に答える
0

プロジェクトでrichfaceshtmlエディターを使用していましたが、いくつかの問題が発生したため、apacheによって提供されたtinymceファイルをロードする独自のfaceletタグを作成することにしました。チャームのように機能します

于 2013-02-01T10:45:00.853 に答える