CombinedResourceHandler不适用于PrimeFaces或PF Extensions

时间:2014-05-28 18:59:40

标签: primefaces jsf-2.2 omnifaces primefaces-extensions combinedresourcehandler

如果我有两个这样的面板,我将从一个例子开始:

<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>

Panel 2有一个&#34; p:fileupload&#34;组件,默认情况下,在加载页面时显示面板1,当我更改为面板2时,发送ajax请求以更新&#34;容器&#34;但由于这段代码我得到了一个例外:

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或with pe:ckEditor时)加载额外的库而不使用@ResourceDependency批注,在这种情况下我会得到一个异常,因为资源&#34 ; primefaces.js&#34;不存在,被omnifaces取代。

有任何解决此问题的建议吗?

1 个答案:

答案 0 :(得分:1)

有三个选项可以解决这个设计问题:

  1. 请勿使用ajax进行导航,而是使用普通(以及可收藏的和SEO友好的)请求。

  2. 不要将视图构建时间标记用于基于请求的呈现(通过ajax),而是使用rendered属性。

  3. 使用<h:outputScript>自己明确包含缺失的资源。例如。 <p:fileUpload>

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