このような 2 つのパネルがある場合、例から始めます。
<h:panelGroup id="container">
<!-- PANEL 1 -->
<c:if test=#{bean.render1}>
<ui:include ... />
</c:if>
<!-- PANEL 2 -->
<c:if test=#{bean.render2}>
<ui:include ... />
</c:if>
</h:panelGroup>
パネル 2 には「p:fileupload」コンポーネントがあり、デフォルトでは、ページが読み込まれるとパネル 1 が表示されます。パネル 2 に変更すると、「コンテナ」を更新するために ajax リクエストが送信されますが、次のコードが原因で例外が発生します。
createWidget : function(widgetConstructor, widgetVar, cfg, resource) {
if(PrimeFaces.widget[widgetConstructor]) {
//...
} else {
var scriptURI = $('script[src*="/javax.faces.resource/primefaces.js"]').attr('src').replace('primefaces.js', resource + '/' + resource + '.js'),
cssURI = $('link[href*="/javax.faces.resource/primefaces.css"]').attr('href').replace('primefaces.css', resource + '/' + resource + '.css'),
cssResource = '<link type="text/css" rel="stylesheet" href="' + cssURI + '" />';
//...
}
}
どのように推測できるか、一部のコンポーネント (c:if または pe:ckEditor を使用する場合) は、@ResourceDependency アノテーションを使用せずに追加のライブラリをロードします。その場合、リソース「primefaces.js」が存在しないため、例外が発生します。 omnifaces に置き換えられました。
これを解決するための提案はありますか?