2

我正在使用 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

负载: 在此处输入图像描述

渲染后,它有不同的值,但组合不显示。 在此处输入图像描述

4

1 回答 1

3

我试图重现您的错误但没有成功。或者更确切地说:代码按预期工作。使用<b:selectMultMenu>新值更新。

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

所以我建议你

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

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

  1. 作为基础,我使用了我们的展示柜。
  2. 我将您的 JSF 代码片段复制到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));                                                                                                                                               
        }                                                                                                                                                                                                           
      }                                                                                                                                                                                                             
    
    }                                                                                                                                                                                                               
    

当我选择第一个组合框的一个选项时,将<b:selectMultiMenu>使用新的(随机)值进行更新。

于 2018-01-19T22:04:44.403 回答