3

PrimeFaces は、h:head で以下を条件付きでレンダリングします。

<script type="text/javascript" src="/webapp/javax.faces.resource/push/push.js.jsf?ln=primefaces"><!--//--></script>

PrimeFaces p:socket コンポーネントが JSF/xhtml ページに追加されたとき。一部のページを更新すると、この push.js ファイルが h:head でレンダリングされません。

push.js ファイルがレンダリングされない場合、PrimeFaces Push で発生している問題を修正/回避するために、push.js ファイルを条件付きでレンダリングしたいと思います。

詳細については、以下の PrimeFaces フォーラム トピック URL をクリックしてください。

キャッチされていない TypeError: undefined は関数ではありません

次のような bean 属性値に基づいて h:head を条件付きでレンダリングしているため、この質問をしています。

<h:head rendered="#{!pageNavigationController.gmaps and !pageNavigationController.gmapsAutoComplete}">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="refresh" content="#{session.maxInactiveInterval};url=pf_viewExpired.jsf" />
    <title><h:outputText escape="false" value="MCMS"/></title>
    <h:outputStylesheet name="css/mcms.css"/>
    <h:outputScript name="js/mcms.js"/>
    <h:outputScript name="js/addUsingTemplate.js"
                    rendered="#{pageNavigationController.isPageSelected('/orders/pf_AddUsingTemplate.xhtml')}"/>
</h:head>

おそらく、ページ上の複数の h:head の条件付きレンダリングが原因で、コンテナー TomEE 1.5 SNAPSHOT が .js ファイルを提供するのが困難になっている可能性があります。または、これは実際には PrimeFaces Push (Atmosphere) の問題である可能性があります。最終的には解決する必要がありますが、ファイルが h:head でまだレンダリングされていない場合は、h:outputScript を介して .js ファイルをレンダリングする方法があると確信しています。

Web アプリケーションは以下を使用しています。

PrimeFaces 3.5 スナップショット、TomEE 1.5 スナップショット (Tomcat 7.0.32)、JUEL 2.2.5、OmniFaces 1.3 スナップショット

お知らせ下さい。

4

1 に答える 1

4

これは、PrimeFaces の問題のようです。同じビューのすべてのリクエストで を強制的にロードするにはpush.js、明示的に

<h:outputScript library="primefaces" name="push/push.js" target="head" /> 

条件付きレンダリングなし。すべてがうまくいった場合、つまり、JSF2 リソース処理メカニズムに従って適切に動作する場合、適切に機能していたとしても、2 回含めるべきではありません。

于 2012-11-23T17:16:43.310 に答える