1

このような 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」が存在しないため、例外が発生します。 omn​​ifaces に置き換えられました。

これを解決するための提案はありますか?

4

1 に答える 1

1

この設計上の問題を解決するには、次の 3 つのオプションがあります。

  1. ナビゲートに ajax を使用しないでください。代わりに、通常の (ブックマーク可能で SEO に適した) リクエストを使用してください。

  2. リクエスト ベースのレンダリング (ajax による) には、ビューのビルド時間タグを使用しないでください。代わりに、rendered属性を使用してください。

  3. を使用して、不足しているリソースを自分で明示的に含めます<h:outputScript>。例<p:fileUpload>:

    <h:outputScript library="primefaces" name="fileupload/fileupload.js" target="head" />
    
于 2014-05-29T04:24:25.750 に答える