2016-05-18 18 views
0

dataTableの列の備考に基づいて、dataTableのチェックボックスを有効または無効にする際に助けが必要です。備考欄が空でないか空白でない場合は、行のチェックボックスを無効にする必要があります。そうでない場合は、備考欄が空白または空白の場合は有効にする必要があります。行の列の値に基づいてdataTableのチェックボックスを有効または無効にする方法

メソッドのバッキングBeanから行う必要があります。 dataTableのコードは次のとおりです。initメソッドで

<p:dataTable value="#{testController.employeeList}" id="Employee" var="emp" 
rowIndexVar="rowIndex" 
    selection="#{testController.selectedEmployees}" rowKey="#{emp.id}" 
rowSelectMode="checkbox"> 
         <p:columnGroup type="header"> 
         <p:row> 
          <p:column/> 
          <p:column headerText="ID"/> 
          <p:column headerText="Name"/> 
          <p:column headerText="Remarks"/> 
          <p:column headerText="Update"/> 
         </p:row> 
        </p:columnGroup> 
        <p:column selectionMode="multiple"/> 
        <p:column headerText="ID"> 
         <h:outputText value="#{emp.id}"/> 
        </p:column> 
        <p:column headerText="Name"> 
         <h:outputText value="#{emp.name}" id="name"/> 
        </p:column> 
        <p:column headerText="Remarks"> 
         <h:inputText id="inputT1" value="#{emp.remarks}"/> 
        </p:column> 
        <p:column headerText="Update"> 
         <p:commandButton id="updateCmd" title="Update" 
             actionListener="#{testController.updateRecord}"> 
         </p:commandButton> 
        </p:column> 
</p:dataTable> 

public void init() { 
if (e.getRemarks.equals("") || e.getRemarks == null) 
{ 
// I need to update the checkbox to be enabled 
} 
else 
{ 
//I need to update the checkbox to be disabled 
} 
+1

使用disabledSelection = "#{空でないemp.remarks}" データテーブル – Unknown

+0

に応答していただきありがとうござい@Unknown。これは、ページロード時にdataTableをロードする際に問題の一部を解決します。もう一つの問題は、commandButtonをクリックしてUpdateRecordメソッドを呼び出すと、チェックボックスを有効にできるはずなので、どうすればいいのでしょうか? – 99maas

+0

あなたのユースケースは何ですか?あなたは、セルの代わりに全体のデータテーブルを更新するのは大丈夫ですか? – Unknown

答えて

0

あなたは、Employeeクラスに

private Boolean selected; 
private Boolean isRemarkNotEmpty; 

を2プロパティを追加する必要がある唯一のチェックボックスを更新し、isRemarkNotEmpty = (remarks!=null)&&(!remarks.trim().isEmpty())しばらくを割り当てるにはオブジェクトを作成します。

データテーブル:

<p:dataTable value="#{testController.employeeList}" id="Employee" 
        var="emp" widgetVar="employeeTable" rowIndexVar="row" 
         rowKey="#{emp.id}"> 

        <p:columnGroup type="header"> 
        <p:row> 
         <p:column/> 
         <p:column headerText="ID"/> 
         <p:column headerText="Name"/> 
         <p:column headerText="Remarks"/> 
         <p:column headerText="Update"/> 
        </p:row> 
       </p:columnGroup> 
       <p:column> 
        <p:selectBooleanCheckbox value="#{emp.selected}" disabled="#{emp.isRemarkNotEmpty}" id="myCheckBox"></p:selectBooleanCheckbox> 
       </p:column> 
       <p:column headerText="ID"> 
        <h:outputText value="#{emp.id}"/> 
       </p:column> 
       <p:column headerText="Name"> 
        <h:outputText value="#{emp.name}" id="name"/> 
       </p:column> 
       <p:column headerText="Remarks"> 
        <h:inputText id="inputT1" value="#{emp.remarks}"/> 
       </p:column> 
       <p:column headerText="Update"> 
        <p:commandButton id="updateCmd" title="Update" 
            actionListener="#{testController.updateRecord}"> 
          <f:attribute name="rowId" value="#{row}"></f:attribute> 
        </p:commandButton> 
       </p:column> 
       </p:dataTable> 

更新方法:

public void updateRecord(ActionEvent actionEvent) { 
     Integer rowId = (Integer)actionEvent.getComponent().getAttributes().get("rowId"); 
     FacesContext context = FacesContext.getCurrentInstance(); 
     Employee selectedRecord = context.getApplication().evaluateExpressionGet(context, "#{emp}", Employee.class); 
     selectedRecord.setIsRemarkNotEmpty(false); 
RequestContext.getCurrentInstance().update("myform:sEmployee:"+rowId+":myCheckBox"); 
    } 
関連する問題