如果我有两个这样的面板,我将从一个例子开始:
<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取代。
有任何解决此问题的建议吗?
答案 0 :(得分:1)
有三个选项可以解决这个设计问题:
请勿使用ajax进行导航,而是使用普通(以及可收藏的和SEO友好的)请求。
不要将视图构建时间标记用于基于请求的呈现(通过ajax),而是使用rendered
属性。
使用<h:outputScript>
自己明确包含缺失的资源。例如。 <p:fileUpload>
:
<h:outputScript library="primefaces" name="fileupload/fileupload.js" target="head" />