3

com.sun.facesバージョンを使用して2.1.18います。質問のリストを表示していますが、(データベース ID に基づいて) いくつかの質問に対して動的 Javascript を挿入したいと考えています。

h:outputScriptタグの仕様によると、name属性のタイプは次のとおりです: javax.el.ValueExpression( に評価される必要がありますjava.lang.String)。

ただし、このコードは私のために働いています:

<ui:repeat value="#{js.questionScripts[question.id]}" var="script">
  <h:outputScript name="myScript.js" library="js" target="head"/>
</ui:repeat>

しかし、このコードはそうではありません:

<ui:repeat value="#{js.questionScripts[question.id]}" var="script">
  <h:outputScript name="#{script}" library="js" target="head"/>
</ui:repeat>

は、質問のリストに対する#{question}周囲の<ui:repeat>反復から来ています。

#{script}空でないかどうかを確認する出力を追加しましたが、正しいリソース名が含まれていました。

これを解決する方法や代替手段を実装する方法についてのアイデアはありますか?

4

1 に答える 1

3

JSF リソース管理によって認識されるためには、ビューの<h:outputScript>ビルド時に作成する必要があります。は<ui:repeat>ビューのレンダリング時間中に実行されるため、遅すぎます。を使用する必要があります<c:forEach>。どのように失敗したかはわかりませんが、(ポスト)コンストラクション中にプロパティがすでに準備されており、ビューのビルド時に使用できる#{js}リクエスト、セッション、またはアプリケーション スコープの Bean であれば、私にとっては問題なく動作します。questionScripts#{question.id}

<c:forEach items="#{js.questionScripts[question.id]}" var="script">
    <h:outputScript name="js/#{script}" target="head"/>
</c:forEach>

( itemsattribute の代わりにattribute を使用する必要があることに注意してください。また、 attributeの一見不適切な使用法valueを修正したことにも注意してください)library

以下も参照してください。

于 2013-02-12T14:20:00.507 に答える