p:commandButton只需单击即可执行操作

时间:2013-04-16 17:41:17

标签: jsf-2 primefaces

p:commandButton只需单击即可执行操作 我有下表

                  <p:dataTable id="firmasTabla" var="car" editable="true" editMode="cell" value="#{clientesMB.itemsPersonaFirmanUtil}"  widgetVar="carsTable">  

                        <p:ajax event="cellEdit" listener="#{clientesMB.modiCellPersonaFirma}" update=":form2:growl" />  
                        <p:column headerText="Nro CI" style="width:30%">  
                            <p:cellEditor>  
                                <f:facet name="output"><h:outputText value="#{car.ci}" /></f:facet>  
                                <f:facet name="input"><p:inputText id="modelInput" value="#{car.ci}" style="width:96%"/></f:facet>  
                            </p:cellEditor>  
                        </p:column> 
                        <p:column headerText="Nombre" style="width:60%">  
                            <p:cellEditor>  
                                <f:facet name="output"><h:outputText value="#{car.nombre}" /></f:facet>  
                                <f:facet name="input"><p:inputText id="modelInput2" value="#{car.nombre}" style="width:96%"/></f:facet>  
                            </p:cellEditor>  
                        </p:column> 
                        <p:column style="width:10%">  
                            <p:commandButton id="selectButton256" actionListener="#{clientesMB.deleteSelecPersonaFirmaCliente}" 
                                             icon="ui-icon-trash" title="Eliminar" update="firmasTabla">  
                                <f:setPropertyActionListener value="#{car}" target="#{clientesMB.personaFirmasSelect}" />  
                            </p:commandButton>  
                        </p:column> 
                    </p:dataTable> 

我必须单击两次才能运行该操作, 有时是第一次。 在backingbean中有以下方法:

    public void deleteSelecPersonaFirmaCliente() throws Exception {
    try {
        boolean b = this.getItemsPersonaFirmanUtil().remove(personaFirmasSelect);
        boolean b1 = b; 
    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, "Error: deleteSelecPersonaFirmaCliente() " + e.getMessage());

    }
}

调试发生时,第一次单击进入方法,但就好像在列表中找不到要删除的对象一样。然后单击sugundo删除列表对象。

2 个答案:

答案 0 :(得分:5)

p:commandButton 中使用操作代替 actionlistener ,因为操作在 f:setPropertyActionListener 之后执行

actionlistener 第一次执行时,它没有找到你的对象集,因为它在 f:setPropertyActionListener 完成之前运行,但这并不总是发生。这解释了为什么单击会在某个时间有效。

答案 1 :(得分:2)

我的blog中有一个小实验解释了你的问题。要解决它,您有两个选择:

  1. 如上文Hidalgo所述,请使用actionListener切换为action属性。
  2. 或者,按以下方式更改actionListener方法:
  3. 。按钮:

    <p:commandButton id="selectButton256" title="Eliminar" update="firmasTabla"
                     actionListener="#{clientesMB.deleteSelecPersonaFirmaCliente(car)}" /> 
    

    。 Bean方法:

    public void deleteSelecPersonaFirmaCliente(Car car) throws Exception {
        // Your logic
    }