2016-04-22 11 views
0

Ich brauche Ihre Hilfe beim Aktualisieren einer bestimmten inputText-Komponente in einer DataTable aktiviert werden, wenn das Kontrollkästchen in der Zeile aktiviert ist. Hier ist der Code für die Datatable:So aktualisieren Sie bestimmte inputText in dataTable basierend auf rowSelect-Ereignis zu aktivieren oder zu deaktivieren

<h:form id="request"> 
     <p:dataTable value="#{dataTableView.employeeList}" id="Employee" var="emp" 
          selection="#{dataTableView.selectedEmployees}" rowKey="#{emp.id}"> 
     <p:ajax event="rowSelectCheckbox" listener="#{dataTableView.EnableInputText}" /> 
     <p:ajax event="rowSelect" listener="#{dataTableView.EnableInputText}" /> 
      <p:columnGroup type="header"> 
       <p:row> 
       <p:column/> 
      <p:column headerText="ID"/> 
      <p:column headerText="Name"/> 
      <p:column headerText="Location"/> 
      <p:column headerText="Remarks"/> 
       </p:row> 
       </p:columnGroup> 
      <p:column selectionMode="multiple" style="width:2%;text-align:center"/> 
      <p:column headerText="ID"> 
      <h:outputText value="#{emp.id}"/> 
      </p:column> 
      <p:column headerText="Name"> 
      <h:outputText value="#{emp.name}"/> 
      </p:column> 
      <p:column headerText="Location"> 
      <h:outputText value="#{emp.location}"/> 
      </p:column> 
      <p:column headerText="Remarks"> 
      <h:inputText id="inputT1" value="#{emp.remarks}" disabled="#{emp.disable}"/> 
        </p:column> 
       </p:dataTable> 
      </h:form> 

Und der Code in der Backing Bean:

private List<Student> employeeList = new ArrayList<Student>(); 
private List<Student> selectedEmployees; 
private boolean disable=true; 


public void EnableInputText(SelectEvent event) { 
    RequestContext context = RequestContext.getCurrentInstance(); 


    for(int i=0;i<selectedEmployees.size();i++){ 
     for(int j=0;j<employeeList.size();j++){   
     if(selectedEmployees.get(i).getId().equals(employeeList.get(j).getId())) 
     { 
      selectedEmployees.get(j).setDisable(false); 
      context.update("request:Employee:"+i+":inputT1"); 
      //employeeList.get(j).setDisable(false); 
     } 
     } 
    } 
} 

Derzeit kann ich auf das Kontrollkästchen klicken, aber die inputText wird deaktiviert bleiben und ich werde Erhalten Sie den Fehler:

java.lang.UnsupportedOperationException

Antwort

2

Ihr Problem ist mehr mit JAVA als die Primefaces verwandt.

Das Problem scheint ausgewählt zu werdenEmployees.get (j) .setDisable (false);

Es gibt mehr Chancen auf java.lang.IndexOutOfBoundsException.

Sie müssen nur die Datentabelle nach dem Ereignisauslöser aktualisieren.

<p:ajax event="rowSelectCheckbox" 
          listener="#{dataTableView.EnableInputText}" update="Employee" /> 
<p:ajax event="rowSelect" 
          listener="#{dataTableView.onRowSelect}" update="Employee"/> 
<p:ajax event="rowUnselectCheckbox" 
         listener="#{dataTableView.onRowUnselect}" update="Employee"/> 

On Ankreuzfeld:

public void EnableInputText(SelectEvent event){ 
     for (int i = 0;i<selectedEmployees.size();i++) { 
      for (int j = 0;j<employeeList.size();j++) { 
       if (selectedEmployees.get(i).getId().equals(employeeList.get(j).getId())) { 
        employeeList.get(j).setDisabled(false); 
       } 
      } 
     } 
    } 

Auf Zeile auswählen:

public void onRowSelect(SelectEvent selectEvent){ 
     Employee emp = (Employee)selectEvent.getObject(); 

     for (Employee e : employeeList) { 
      if (emp.getId().equals(e.getId())) { 
       e.setDisabled(false); 
      } 
      else { 
       e.setDisabled(true); 
      } 
     } 

    } 

On Ankreuzfeld Unselect

public void onRowUnselect(UnselectEvent unselectEvent){ 
     Employee emp = (Employee)unselectEvent.getObject(); 

     for (Employee e : employeeList) { 
      if (emp.getId().equals(e.getId())) { 
       e.setDisabled(true); 
      } 
     } 
    } 

Output:

enter image description here

+0

Danke für Ihre Antwort. Aber leider kann ich nur auf eine Checkbox auf der Seite klicken und der inputText wird aktiviert. Wenn ich jedoch versuche, erneut auf ein anderes Kontrollkästchen zu klicken oder das Häkchen zu entfernen, passiert nichts und die Seite scheint eingefroren zu sein. – 99maas

+0

Es scheint in meinem System gut zu funktionieren. Haben Sie einen Fehler? – Unknown

+0

Es wird kein Fehler angezeigt – 99maas