当我在 primefaces 中选择一个 selectonemenu 项目时,命令按钮不起作用

commandbutton doesnt work when i choose a selectonemenu item in primefaces

当我在 selectonemenu 中选择一个项目时,我的命令按钮的 actionlistener 不起作用,并且在我加载页面之前它永远不会起作用,这是我的代码

 <h:form id="form2" >
            <div class="col-lg-6" >
                <p:panelGrid columns="3">
                    <p:outputLabel value="plato" />
                    <p:selectOneMenu value="#{salonController.productoSeleccionado}" filter="true" filterMatchMode="contains" effect="fade">
                        <f:selectItem itemLabel="seleccione un producto" itemValue="" />
                        <f:selectItems value="#{salonController.listaProductos}" var="item" itemValue="#{item}" itemLabel="#{item.nombre}" />
                    </p:selectOneMenu>
                    <p:commandButton value="añadir" update="dtProductos" actionListener="#{salonController.addProducto()}" />
                </p:panelGrid>
            </div>
            <div class="col-lg-6">
                <p:dataTable id="dtProductos" value="#{salonController.listaProductosEscogidos}" var="dtProd" emptyMessage="aun no se añadieron productos" >
                    <p:column>
                        <p:outputLabel value="#{dtProd.nombre}" />
                    </p:column>
                    <p:column style="width:130px">
                        <p:commandButton class="btn-success"  actionListener="#{salonController.quitarProducto(dtProd)}"
                                         icon="ui-icon-trash" update="dtProductos" value="eliminar" title="Quitar producto"/>
                    </p:column>
                </p:dataTable>

            </div>
        </h:form>

当我调试控制器时,在 select 一个项目之后 selectonemenu 我的方法 addProduto() 从来没有 运行s,在此之前我的方法 运行正常。

@Named("salonController")
@ViewScoped
public class salonController implements Serializable {

@PostConstruct
public void init() {
    this.productoSeleccionado = new Productos();

}
public Productos getProductoSeleccionado() {
    return productoSeleccionado;
}

public void setProductoSeleccionado(Productos productoSeleccionado) {
    this.productoSeleccionado = productoSeleccionado;
}


public void quitarProducto(Productos producto) {
    this.listaProductosEscogidos.remove(producto);
}

public void addProducto() {
    this.listaProductosEscogidos.add(productoSeleccionado);
}

}

请帮帮我

您在表格中的第一个 div 有一些问题;例如 p:commandButton value="añadir" 应该有这个 actionListener="#{salonController.addProducto} (调用方法 addProducto 没有括号) 其次,根据 Primefaces SelectOneMenu,您的 advanced selectOneMenu 应该如下所示:

<h:form id="form2" >
           <div class="col-lg-6" >
              <p:panelGrid columns="3">
                 <p:outputLabel for="advanced" value="plato" />
                 <p:selectOneMenu id="advanced" var="t" value="#{salonController.productoSeleccionado}" filter="true" filterMatchMode="contains" effect="fade">
              <f:selectItems value="#{salonController.listaProductos}" var="item" itemValue="#{item}" itemLabel="#{item.nombre}" />

            <p:column>
            <h:outputText value="#{t.nombre}" />
            </p:column>
           </p:selectOneMenu>
           <p:commandButton value="añadir" update="dtProductos" actionListener="#{salonController.addProducto}" />
           </p:panelGrid>
         </div>
          </h:form>