通过FacesContext进行部分渲染

时间:2012-06-21 12:43:59

标签: jsf

实际上我有一个inputText和一些ajax Request来在keyup事件出现时呈现数据表。

mypage.xhmtl:

 <h:form id="form">

    <h:inputText id="number_in" value="#{bean.number}" redisplay="false" >
         <f:ajax event="keyup" render=":form:dataTable" />
    </h:inputText>

    <h:dataTable id="dataTable" ...>
    ...
    </h:dataTable>

 <h:form>

我不想再从jsf页面渲染dataTable了。我想在调用侦听器方法时通过FacesContext在MangedBean中呈现dataTable。

mypage.xhtml:

<h:form id="form">

    <h:inputText id="number_in" value="#{bean.number}" redisplay="false" >
         <f:ajax event="keyup" listener="#{bean.onKeyup}" />
    </h:inputText>

    <h:dataTable id="dataTable" ...>
    ...
    </h:dataTable>

mybean.java:

  @ManagedBean(name="bean")
  @SessionScoped
  public class Bean {
     ...
     public void onKeyUp(AjaxBehaviorEvent event) {
        //Here I want to render the dataTable
     }
     ...
  }

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:12)

您可以通过编程方式将渲染ID添加到PartialViewContext#getRenderIds()

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("form:dataTable");

请注意,这只能包含绝对客户端ID,不应以:为前缀。

答案 1 :(得分:-2)

FacesContext.getCurrentInstance().getPartialViewContext().setRenderAll(true);