【问题标题】:Partial rendering via FacesContext [duplicate]通过 FacesContext 进行部分渲染 [重复]
【发布时间】:2012-06-23 16:54:27
【问题描述】:

实际上我得到了一个 inputText 和一些 ajax 请求来在 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 中呈现数据表。

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
     }
     ...
  }

我怎样才能做到这一点?

【问题讨论】:

  • 您想在什么时候这样做?例如,当调用托管 bean 操作或侦听器方法时?如果是这样,请显示负责此的组件和方法的代码,然后我们可以告诉您如何相应地更改它。
  • 我只是添加了更多代码,希望能改进我的问题。

标签: jsf


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢。数据表会立即呈现吗?
  • 否,仅当针对同一请求执行渲染响应阶段时。这只是一个阶段。监听器方法在调用应用阶段执行。
【解决方案2】:
FacesContext.getCurrentInstance().getPartialViewContext().setRenderAll(true);

【讨论】:

  • 为什么这是正确答案?也请添加一些解释。
  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
猜你喜欢
  • 2014-12-31
  • 2015-04-30
  • 2011-11-03
  • 1970-01-01
  • 2014-12-22
  • 2023-01-30
  • 2015-07-17
  • 2012-05-12
  • 1970-01-01
相关资源
最近更新 更多