1

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 删除列表对象。

4

2 回答 2

5

在您的p:commandButton中使用action而不是actionlistener ,因为 action 在f:setPropertyActionListener之后执行

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

于 2013-04-16T19:01:47.193 回答
2

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

  1. 正如上面 Hidalgo 所说,从使用切换actionListeneraction属性。
  2. 否则,更改您的actionListener方法如下:

. 按钮:

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

. 豆方法:

public void deleteSelecPersonaFirmaCliente(Car car) throws Exception {
    // Your logic
}
于 2013-04-16T20:54:54.033 回答