【问题标题】:BootsFaces selectMultiMenu not rendering with ajaxBootsFaces selectMultiMenu 不使用 ajax 渲染
【发布时间】:2018-06-26 19:46:29
【问题描述】:

我正在使用 bootsFaces 中的 selectMultiMenu,初始值显示完美,但在渲染后,组合不会打开新值,如果我在浏览器中检查源代码,它表明 bean 正确加载了值。它只发生在这个 bootsFaces 的元素上,我的项目的其余部分使用 jsf 渲染,ajax 没有问题。 有什么线索吗?谢谢!

            <h:form id="form-Principal">
            <h:panelGroup id="panel-Principal" layout="block" >
                <div class="col-md-12">                                 
                    <div class="col-md-1">
                        <label for="servicio" class="control-label">Servicio:</label>
                    </div>
                    <div class="col-md-2">
                        <h:selectOneMenu disabled="#{empty testops.ambiente}" id="servicio" class="combobox form-control" value="#{testops.servicio}" >
                            <f:selectItem itemValue="" itemLabel="Seleccione..."/>
                            <f:selectItems value="#{testops.listServicios}" />
                            <f:ajax event="change" listener="#{testops.obtenerOperaciones}" render="cboperacion" execute="@this"></f:ajax>
                        </h:selectOneMenu>
                        <h:message for="servicio" class="error"/>
                    </div>
                    <div class="col-md-1">
                        <label for="operacion" class="control-label">Operación:</label>
                    </div>
                    <div class="col-md-2">
                        <b:selectMultiMenu id="cboperacion" value="#{testops.operacion}" nonSelectedText="Seleccione...">
                             <f:selectItems value="#{testops.operaciones}"/>
                        </b:selectMultiMenu>
                    </div>
                    <div class="col-md-1">
                    </div>
                    <div class="col-md-1">
                        <f:ajax render=":salida form-Principal:panel-Principal" execute="@form" onevent="loading">
                            <h:commandLink class="btn btn-danger boton_rojo pull-right" value="Ejecutar" action="#{testops.ejecutarOperaciones()}"></h:commandLink>
                        </f:ajax>
                    </div>
                </div>                      
            </h:panelGroup>
        </h:form>enter code here

加载:

渲染后,它有不同的值,但组合不显示。

【问题讨论】:

  • 我猜你说“渲染”是指 AJAX 更新?
  • 是的,正如您在代码中看到的,选择第一个组合时,它调用和Ajax渲染第二个。
  • 您很可能发现了一个错误。我将尝试尽快重现并解决该错误(但这可能需要几天时间)。同时,尝试更新cboperación 的父级。在您的特定情况下,这是主面板,这可能太多了,因为更新面板会将焦点移动到另一个输入字段。但如果我的理论是正确的,&lt;b:selectMultiMenu /&gt; 就被正确初始化了。
  • 如果是这样,请将&lt;b:selectMultiMenu&gt; 包装在&lt;div jsf:id="dropDownID"&gt; 中,并在AJAX 请求中更新此&lt;div&gt;。这应该可以解决问题。
  • 谢谢!!我会试试你说的,我会告诉你的。

标签: jsf bootsfaces ajax-update


【解决方案1】:

我试图重现您的错误,但没有成功。或者更确切地说:代码按预期工作。 &lt;b:selectMultMenu&gt; 更新为新值。

[meta] 我知道这不是一个答案(还)......我只是选择了答案,因为它是包含源代码的唯一方法。 [/元]

所以我建议你

  • 将下面的示例代码复制到您的项目中,看看它是否有效
  • 或者你给我一个“复制器”,即一个显示问题的小而完整的项目。例如,您可以将 Maven 项目上传到 GitHub。请尽量减少复制。例如,我需要能够在不配置数据库的情况下运行它。

这是我用来重现您的错误的源代码:

  1. 作为基础,我使用了我们的展示柜。
  2. 我将您的 JSF 代码 sn-p 复制到了 empty.xhtml
  3. 我按如下方式创建了一个 JSF bean:

    package de.beyondjava.jsf.sample.carshop;                                                                                                                                                                       
    
    import java.util.ArrayList;                                                                                                                                                                                     
    import java.util.List;                                                                                                                                                                                          
    
    import javax.faces.bean.ManagedBean;                                                                                                                                                                            
    import javax.faces.bean.SessionScoped;                                                                                                                                                                          
    
    @ManagedBean                                                                                                                                                                                                    
    @SessionScoped                                                                                                                                                                                                  
    public class Testops {                                                                                                                                                                                          
      private String ambiente = "que";                                                                                                                                                                              
    
      private List<String> listServicios = new ArrayList<>();                                                                                                                                                       
    
      private String operacion;                                                                                                                                                                                     
    
      private List<String> operaciones = new ArrayList<>();                                                                                                                                                         
    
      private String servicio;                                                                                                                                                                                      
    
      {                                                                                                                                                                                                             
        listServicios.add("Servicio 1");                                                                                                                                                                            
        listServicios.add("Servicio 2");                                                                                                                                                                            
        shuffleOperaciones();                                                                                                                                                                                       
      }                                                                                                                                                                                                             
    
      public void ejecutarOperaciones(Object o) {                                                                                                                                                                   
    
      }                                                                                                                                                                                                             
    
      public String getAmbiente() {                                                                                                                                                                                 
        return ambiente;                                                                                                                                                                                            
      }                                                                                                                                                                                                             
    
      public List<String> getListServicios() {                                                                                                                                                                      
        return listServicios;                                                                                                                                                                                       
      }                                                                                                                                                                                                             
    
      public String getOperacion() {                                                                                                                                                                                
        return operacion;                                                                                                                                                                                           
      }                                                                                                                                                                                                             
      public List<String> getOperaciones() {                                                                                                                                                                        
        return operaciones;                                                                                                                                                                                         
      }                                                                                                                                                                                                             
    
      public String getServicio() {                                                                                                                                                                                 
        return servicio;                                                                                                                                                                                            
      }                                                                                                                                                                                                             
    
      public void obtenerOperaciones(Object o) {                                                                                                                                                                    
        shuffleOperaciones();                                                                                                                                                                                       
      }                                                                                                                                                                                                             
    
      public void setAmbiente(String ambiente) {                                                                                                                                                                    
        this.ambiente = ambiente;                                                                                                                                                                                   
      }                                                                                                                                                                                                             
    
      public void setListServicios(List<String> listServicios) {                                                                                                                                                    
        this.listServicios = listServicios;                                                                                                                                                                         
      }                                                                                                                                                                                                             
    
    
      public void setOperacion(String operacion) {                                                                                                                                                                  
        this.operacion = operacion;                                                                                                                                                                                 
      }                                                                                                                                                                                                             
    
      public void setOperaciones(List<String> operaciones) {                                                                                                                                                        
        this.operaciones = operaciones;                                                                                                                                                                             
      }                                                                                                                                                                                                             
    
      public void setServicio(String servicio) {                                                                                                                                                                    
        this.servicio = servicio;                                                                                                                                                                                   
      }                                                                                                                                                                                                             
    
      private void shuffleOperaciones() {                                                                                                                                                                           
        operaciones = new ArrayList<>();                                                                                                                                                                            
        for (int i = 0; i < 4; i++) {                                                                                                                                                                               
          operaciones.add("opción " + Math.ceil(Math.random()*1000));                                                                                                                                               
        }                                                                                                                                                                                                           
      }                                                                                                                                                                                                             
    
    }                                                                                                                                                                                                               
    

当我选择第一个组合框的一个选项时,&lt;b:selectMultiMenu&gt; 会更新为新的(随机)值。

【讨论】:

  • 谢谢你的帮助,我这周有点忙,但我会尽快尝试这段代码,我会告诉你结果。
  • 可以添加empty.xhtml吗?我想检查您的代码和我的代码之间的差异。我是 jsf 的新手,所以很可能所有这些问题都是因为我造成的
  • 不需要该文件,我让它与您的代码和简单的 xhtml 文件一起工作,只有 2 个组合,所以问题肯定出在我的代码的其余部分。非常感谢您的帮助,很抱歉打扰您。
  • 问题出在我的页面上的一个包含中,它导入了一些 css 和 js。
  • 这是产生问题的 js ,如果我删除它就可以了,不幸的是我需要这个下拉菜单。
猜你喜欢
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 2014-04-27
  • 2019-01-29
  • 2019-10-11
  • 2012-08-29
  • 2013-01-29
相关资源
最近更新 更多