2016-08-08 44 views
0

Ich habe einen Bildschirm, in dem bestimmte Daten angezeigt werden. Ich verwende Datatable-Option, um die Daten und Rowselector anzuzeigen, um die Zeile auszuwählen. Wenn ich irgendeine Zeile auswähle, erscheint eine Option, über die der Benutzer die Daten bearbeiten kann (wie Bearbeiten und Löschen), aber ich möchte, dass einige Daten nicht editierbar sind.Deaktivieren einer bestimmten Zeile in einer Datentabelle IceFace

Ich habe einen Bildschirm, auf dem ich Daten auf Monatsbasis zeige, als ob der aktuelle Monat August ist, dann zeigt meine Seite die Daten der letzten zwei Monate und die Daten der nächsten 10 Monate.

Jetzt möchte ich aktuelle Monate und vorherige zwei Monate Daten nicht editierbar sein oder deaktivieren Sie bei der Auswahl der Zeile durch Rowselector. enter image description here

Unten ist die meiner Ansicht Seite und rowselector Funktion:

<i:dataTable id="ConfigurationOne" 
      headerClass="dataTableCommonHeader" 
     headerClasses="table_header" 
     columnClasses="stringColumn, stringColumn w80" 
     rowClasses="level2ColorStyle, level1ColorStyle" 
     value="#{configOneBean.monthsDateList}" var="row" cellpadding="0" 
     cellspacing="1" columnWidths="50px,100px" rows="25" 
     width="40%" 
     onrowmouseover="this.style.cursor='default';this.style.backgroundColor='#F1F1F1'‌​;" 
     onrowmouseout="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" 
     > 

     <i:column> 
      <i:rowSelector value="#{row.selected}" 
       selectionListener="#{configOneBean.rowSelectMonthsListener}" /> 
      <f:facet name="header"> 
       <i:outputText value="#{resApp['config.type.code']}" /> 
      </f:facet> 
      <i:panelGroup style="width:200px;overflow:hidden;"> 
       <i:outputText value="#{row.NRPV_NRPA_CODE}" /> 
      </i:panelGroup> 
     </i:column> 

     <i:column> 

      <f:facet name="header"> 
       <i:outputText value="#{resApp['config.type.name']}" /> 
      </f:facet> 
      <i:panelGroup style="width:200px;overflow:hidden;"> 
       <i:outputText value="#{row.NRPV_CREATED_BY}" /> 
      </i:panelGroup> 
     </i:column> 



    </i:dataTable> 

public void rowSelectMonthsListener(RowSelectorEvent event) { 
    int selectRow = event.getRow(); 
    initActionMap(); 
    if (event.isSelected()) { 

     this.monthsDate = monthsDateList.get(selectRow); 
     getAllMonthsAndDate(); 
     actionMap.put(WorkMode.EDIT_GROUP, true); 

    } else { 

     this.monthsDate = null; 
     workMode = WorkMode.EMPTY; 
    } 
} 

Antwort

0

Die rowSelector Komponente hat eine rendered Attribut. Wenn Sie es an eine Methode binden, um festzustellen, ob die Zeile angeklickt werden kann, sollte dies den Zweck erfüllen. Nicht, dass ich dieses Attribut in meinem Code nicht versucht habe, aber es sollte funktionieren, wenn nicht abgehört.

+0

Hallo ** Wis ** danke für deine Antwort .... Könntest du bitte etwas mehr ausarbeiten, oder jeder Beispielcode wäre eine große Hilfe :) –

+0

Ich schlug etwas wie folgt vor: ' 'und in Ihrer verwalteten Bean sollten Sie einen' public boolean isSelectable (Object obj) 'haben wird Ihre Variable 'obj' gegen das aktuelle Datum testen und bestimmen, ob es auswählbar sein soll oder nicht. Beachten Sie, dass ich den Typ Ihrer 'obj' Variablen nicht kenne, vielleicht ein' Date', vielleicht ein 'Calendar' (meine Vermutung, aber könnte Ihr eigener POJO sein). – Wis

+0

Hallo @Wis danke für deine Antwort ......... ich habe versucht, diese Logik anzuwenden, aber es wird alle Zeilen deaktivieren ..... Ich vergleiche Daten mit dem Monatsnamen und wenn es die Monate finden In der Datentabelle wird dann die gesamte Datentabelle deaktiviert. –