2017-03-14 9 views
0

私はMojarra 2.2.13を使用しています。私のプロジェクトではPrimeFaces 6.0が使用されています。JSFリソース(JavaScript)がaddComponentResourceを使用してレンダリングされない

私は自分自身のJSF UIComponentを書いています。それはwebapp/resources/js/charts.min.jsにある少しのJavaScriptが必要です。

@ResourceDependency(name = "js/charts.min.js", target = "head") 

しかし、私はいつもそれをレンダリングする必要はありません。私は@ResourceDependencyを使用して、私のコンポーネントに注釈を付けた場合、スクリプトレンダリングです。だから私は条件付きでencodeBegin(FacesContext context)メソッド内からのビュールートにコンポーネントリソースを追加しようとしていた。

if (condition) { 
    UIOutput js = new UIOutput(); 
    js.setRendererType("javax.faces.resource.Script"); 
    js.getAttributes().put("name", "js/charts.min.js"); 
    context.getViewRoot().addComponentResource(context, js, "head"); 

    writer.startElement("div", null); 
    writer.writeAttribute("class", "myChart", null); 
    // ... write chart data 
    writer.endElement("div"); 
} 

これはは(myChartはしかし、レンダリングある)スクリプトをレンダリングしません。私のログにはエラーは表示されません。どのようなアイデアをチェックしたり改善したりすることができますか?

私はPrimeFacesを使わずにテストしましたが(頭部レンダラーがこれを引き起こしているかどうかはわかりませんが)、結果は同じです。

+0

あなたはしようとしましたJSTLタグの代わりに、Javaコードの設定? –

+0

@ TheBitman no。 UIComponentを作成するときにどのように役立ちますか? –

+0

コンポーネントの代わりにJSFファイルでjs LINKをフィルタリングできると思っていました。しかし、私はあなたの質問を完全に理解していない真実を伝えてください:) –

答えて

0

したがって、encodeBegin(FacesContext context)はリソースを追加するための正しい場所ではありません。あなたはそこでは遅すぎます。

コードをコンポーネントののコンストラクタに移動しました。これでスクリプトが追加されました。私はこれを行うのに最適な場所ですが、100%ではありませんが、コンポーネントライブラリでもコンストラクタでそれをやっているのを見てきました。また、PrimeFacesと連携して動作します。

も参照してください:

関連する問題