2012-10-17 62 views
1

我有一個DataTable的PrimeFaces,其中每行有一個保存刪除和另一的commandButton。 dataTable有selectionMode="single"rowSelectListener。當我點擊命令按鈕時,會觸發rowSelectListener,但commandButton的動作未被觸發。Primefaces數據表 - rowSelectListener隱藏命令按鈕的內部行

怎麼辦?我需要雙方開火!

我不能使用immediate="true",因爲在dataTable之外有一些必須提交的表單域。它適用於在命令按鈕中添加的immediate="true"

Primafaces版本:2.2.1 JSF版本:2.0.3

感謝您事先的任何線索!

代碼:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:v="http://java.sun.com/jsf/composite/composite" 
      xmlns:p="http://primefaces.prime.com.tr/ui"> 
    <h:form id="contractReasonAddFormId"> 
      <span class="error"> 
       <h:messages /> 
      </span> 
    <h:panelGrid columns="2" cellspacing="5" > 
     <h:outputLabel class="label" value="#{resourceBundle.coAddReason_coStatus_label_Key}" /> 
     <h:outputText class="output" value="#{selectedContractService != null ? selectedContractService.COS_STATUS_DESC : contract.CO_STATUS_DESC}" /> 
     <h:outputLabel class="label" for="reasonId" value="#{resourceBundle.contractChangeStatus_NewReason_Key}:" /> 
     <h:selectOneMenu id="reasonId" value="#{bbNewStatusReason.selectedString}" required="true" requiredMessage="#{resourceBundle.contractChangeStatus_NewReason_Key} #{resourceBundle.valueIsRequired}"> 
      <f:selectItem itemValue="" itemLabel="- #{resourceBundle.contractChangeStatus_SelectReason_Key} -" /> 
      <f:selectItems value="#{bbNewStatusReason.list}" var="r" itemValue="#{r.REASON}" itemLabel="#{r.RS_DES}" /> 
     </h:selectOneMenu> 
    </h:panelGrid> 
    <!-- some other form fields ---> 
    <h:panelGrid> 
     <p:dataTable 
     id="currentStatusReasonTable" 
     value="${bbCurrentStatusReason.list}" 
     var="currStReason" 
     selectionMode="single" 
     selection="#{bbCurrentStatusReason.selectedItem}" 
     rowSelectListener="#{contractAddReasonAction.selectReason}" onRowSelectUpdate="reasonValidityTimes"   
     > 
      <p:column sortBy="#{currStReason.RS_DES}" headerText="#{resourceBundle.coAddReason_currStReason_label_Key}"> 
       <h:outputText value="#{currStReason.RS_DES}: "/> 
      </p:column> 
      <!-- Other columns --> 
      <p:column headerText="#{resourceBundle.coAddReason_action_facet_Key}"> 
       <p:commandButton id="updateReasonId" action="dlgUpdate" image="ui-icon ui-icon-pencil" title='#{resourceBundle["button.save"]}' disabled="#{selectedContractService != null ? currStReason.LEVEL == 'C' : false}" > 
        <f:setPropertyActionListener target="#{bbCurrentStatusReason.selectedItem}" value="#{currStReason}" /> 
       </p:commandButton> 
       <p:commandButton id="deleteReasonId" action="dlgDelete" image="ui-icon ui-icon-circle-minus" title='#{resourceBundle["button.delete"]}' disabled="#{selectedContractService != null ? currStReason.LEVEL == 'C' : false}" > 
        <f:setPropertyActionListener target="#{bbCurrentStatusReason.selectedItem}" value="#{currStReason}" /> 
       </p:commandButton> 
       <p:commandButton id="generateDeleteDocumentsId" action="generateDeleteDocuments" image="ui-icon" title='#{resourceBundle["button.generateDocumentsForDel"]}' immediate="true" rendered="#{showPrintDocument != null}" > 
        <f:setPropertyActionListener target="#{bbCurrentStatusReason.selectedItem}" value="#{currStReason}" /> 
       </p:commandButton> 
      </p:column> 

     </p:dataTable> 

    </h:panelGrid> 
    </h:form> 
</ui:composition> 

回答

0

使用分量輸入組件綁定immediate="true"

你必須使用immediate="true"之間輸入組件動作成分玩。

您需要引用JSF Lifecycle效果immediate="true";

BeanOne.java

@ManagedBean(name="BeanOne") 
@RequestScoped 
public class BeanOne { 
    private HtmlInputText inputText; 

    public HtmlInputText getInputText() { 
     return inputText; 
    } 

    public void setInputText(HtmlInputText inputText) { 
     this.inputText = inputText; 
    } 

    public void show() { 
     System.out.println("HtmlInputText ==>" + inputText.getValue()); 
    } 
} 

pageOne.xthml

<h:inputText binding="#{BeanOne.inputText}" immediate="true"/><br/> 
<h:commandButton value="Show_1" action="#{BeanOne.show}" immediate="true"/> 
<h:commandButton value="Show_2" action="#{BeanOne.show}"/> 
+0

你好,謝謝你的答案。但是,我面對的問題竟然完全是另一回事。發生了什麼事情是這個行爲被惹惱了,但是有一個jsf元素的'required = true' - 這引發了一個驗證錯誤,這個錯誤沒有出現在任何地方 - 甚至在控制檯中都沒有。更新(ajax)頁面佈局的錯誤消息顯示窗格後,顯示錯誤消息。 – user1752885

1

我有同樣的問題。我最終在commandButton上使用的是onclick屬性中的event.stopPropagation()。這是我的刪除按鈕。

<p:commandButton icon="ui-icon-trash" 
          onclick="connDelConfirm.show(); event.stopPropagation();" 
          actionListener="#{connectionController.setSelectedConnection(connection)}" 
          disabled="#{connection.deleted}"/> 

對onclick屬性的其他操作打開刪除操作的確認對話框。由於事件的傳播已停止。我需要一種方法來將所選項目設置爲刪除。這是通過動作監聽器完成的。我只是在bean中調用了setSelectedItem方法,並從dataTable中傳遞了'var'屬性。

0

謝謝你的答案。然而,我所面臨的問題的根源竟然完全是另一回事。

發生了什麼事情是這個動作被觸發了,但是有一個jsf元素的'required = true' - 這引發了一個驗證錯誤,這個錯誤沒有出現在任何地方 - 甚至在控制檯中都沒有。在更新(在primaface命令按鈕中,ajax - 使用'update ='屬性)頁面佈局的錯誤消息顯示窗格後,顯示錯誤消息。

感謝你, Rajarshi慕克吉