我有一个像这样的 selectOneMenu :
<h:selectOneMenu class="form-control" value="#{beanBacking.pickedLongy}" id="foo" >
<f:selectItems value="#{beanBacking.thisTakesAwhile}"/>
</selectOneMenu>
填充选择一个菜单中的项目需要很长时间,而我的页面只是在执行此操作时挂起。
我试过了:
<h:selectOneMenu class="form-control" value="#{beanBacking.pickedLongy}" id="foo" >
<f:ajax execute="@form" render="@none" />
<f:selectItems value="#{beanBacking.thisTakesAwhile}"/>
</selectOneMenu>
它也不起作用。有没有办法加载页面上的所有内容和使用ajax加载的项目?
答案 0 :(得分:1)
我最后通过创建一个用@PostConstruct注释的init()方法并在那里执行加载来预加载数据。这样,在创建bean时数据就会被加载,并且不必等待来自页面的调用被加载。
private String longData;
public String getThisTakesAwhile(){
return someClass.getLongData();
}
private String longData;
public String getThisTakesAwhile(){
return longData;
}
@PostConstruct
private void init(){
longData = someClass.getLongData();
}
答案 1 :(得分:0)
您可以延迟加载组件。 然后缓存组件。
<p:outputPanel deferred="true">
<p:cache key="selectOneMenu">
<h:selectOneMenu class="form-control" value="#{beanBacking.pickedLongy}" id="foo" >
<f:selectItems value="#{beanBacking.thisTakesAwhile}"/>
</selectOneMenu>
</p:cache>
</p:outputPanel>
延迟加载将确保加载页面并处理
<f:selectItems value="#{beanBacking.thisTakesAwhile}"/>
将在后台继续,并在处理完成后进行渲染。
用于缓存您可以使用的组件