selectOneMenu中的AJAX JSF selectItems

时间:2014-10-09 20:48:29

标签: ajax jsf jsf-2

我有一个像这样的 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加载的项目?

2 个答案:

答案 0 :(得分:1)

我最后通过创建一个用@PostConstruct注释的init()方法并在那里执行加载来预加载数据。这样,在创建bean时数据就会被加载,并且不必等待来自页面的调用被加载。

BEFORE:


private String longData;   


    public String getThisTakesAwhile(){

        return someClass.getLongData();

  }


NOW:

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}"/>

将在后台继续,并在处理完成后进行渲染。

用于缓存您可以使用的组件

  1. Primefaces Cache
  2. Omnifaces Cache