ajax - Primefaces ajax 根据 backbean 结果更新不同的面板

标签 ajax jsf primefaces

我是 JSF、Primefaces 和 Ajax 的新手,所以我要做的是在我的后台 bean 上的验证为真时更新一个面板,并在它为假时更新另一个面板。

<h:panelGroup id="panel1">
    ...
    <h:commandButton id="btn1" action="#{bean.validate}">
        <p:ajax process="panel1" update="panel1"/>
    </h:commandButton>
</h:panelGroup>

<h:panelGroup id="panel2">
    ...
</h:panelGroup>

背 bean :
public void validate() {
    ...
    if(validatecondition) {
        // Update panel 1
    } else {
        // update panel 2
    }
}

那么可以使用ajax来做到这一点吗?提前致谢!!

最佳答案

当然,两种方式。由于您使用的是primefaces,因此两个选项中较容易的一个是

  • 使用 RequestContext对象有选择地更新面板。您的代码将如下所示:
     public void validate() {
       RequestContext context = RequestContext.getCurrentInstance();
       if(validatecondition) {
         context.update("panel1");
       } else {
         context.update("panel2");
       }
    }
    
  • JSF PartialViewContext 可以做同样的工作,只需多一点打字
    FacesContext ctxt = FacesContext.getCurrentInstance(); //get your hands on the current request context
         if(validatecondition) {
             ctxt.getPartialViewContext().getRenderIds().add("panel1");
           } else {
             ctxt.getPartialViewContext().getRenderIds().add("panel2");
           }
    
  • getRenderIds() call 返回一个组件 Id 列表,JSF 将在响应完成时通过 ajax 更新这些 Id。这基本上是什么RequestContext在primefaces 将在引擎盖下做。

    关于ajax - Primefaces ajax 根据 backbean 结果更新不同的面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779852/

    相关文章:

    jsf - 自定义 FacesServlet <url-pattern> 去掉 .xhtml 扩展名

    php - 想要显示ajax加载gif

    ajax - 标签a4j :ajax in RichFaces的事件属性的可能值列表

    javascript - JSF中的JQuery通过id获取元素

    css - 使 bootsfaces 模态水平滚动

    java - 使用 primefaces dataList 和 URL 参数的 Ajax 分页

    javascript - 我的表情有什么问题吗?

    javascript - 嵌套 AJAX 函数 - 500 内部错误

    ruby-on-rails - AngularJS 无限滚动调用 API 有效但不显示新记录

    java - JSF,Primefaces LazyDataModel - 在不调用加载方法的情况下更新行