2017-01-28 18 views
1

, когда я выбрать пункт в selectonemenu, моей CommandButton в ActionListener не работает, и он никогда не работает, пока не загрузит страницу, это мой кодCommandButton не работает, когда я выбираю пункт selectonemenu в primefaces

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

когда я отлаживаю контроллер, после выбора элемента в selectonemenu мой метод addProduto() никогда не запускается, до этого мой метод запускается нормально.

@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); 
} 

} 

пожалуйста, помогите мне

+0

у вас есть переменный ток инвертор для Producto? –

+1

Добавить компонент сообщений (и обновить его), узнать о конвертерах ... – Kukeltje

ответ

0

Ваш первый DIV в форме есть некоторые проблемы; для, например, p:commandButtonvalue="añadir" должен иметь этот actionListener="#{salonController.addProducto} (вызвать метод addProducto без paranthesis) и во-вторых, в соответствии с Primefaces SelectOneMenu ваш расширенный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>