2012-06-21 60 views
1

实际上我得到了一个inputText和一些ajax当出现一个keyup事件时请求呈现一个数据表。通过FacesContext部分呈现

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页面数据表了。我想在调用侦听器方法时通过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 
    } 
    ... 
    } 

我怎样才能做到这一点?

+0

什么时候你想这样做?例如,何时调用托管bean操作或侦听器方法?如果是这样,请显示组件的代码和负责这个的方法,然后我们可以告诉你如何相应地改变它。 – BalusC

+0

我只是添加更多的代码,并希望改进我的问题。 –

回答

11

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

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

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

+0

非常感谢。 dataTable会立即显示吗? –

+0

不,只有在为相同请求执行呈现响应阶段时。这只是一个阶段。侦听器方法在调用应用程序阶段执行。 – BalusC

-2
FacesContext.getCurrentInstance().getPartialViewContext().setRenderAll(true); 
+5

为什么这是正确答案?请添加一些解释。 – d4Rk

+1

尽管这段代码可能会回答这个问题,但提供关于为什么和/或代码如何回答这个问题的其他内容可以提高其长期价值。 – JAL