2016-04-21 13 views
0

Ich brauche Ihre Hilfe beim Aktivieren und Deaktivieren von inputText basierend auf rowSelectCheckbox und rowUnselectCheckbox, wenn das Kontrollkästchen aktiviert oder deaktiviert ist. Wenn es aktiviert ist, muss ich inputText aktivieren, andernfalls sollte es beim Laden der Seite und beim Deaktivieren deaktiviert werden. Standardmäßig ist der inputText beim Laden der Seite deaktiviert. Hier ist der Code für die JSF:Aktivieren/Deaktivieren von inputText in rowSelectCheckbox und rowUnselectCheckbox

<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="rowUnselectCheckbox" 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 hier ist der Code in der Bohne:

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

@PostConstruct 
public void init() { 
    //add Employees 
    disable=true; 
    Student w1 = new Student(111, "AAAA", "ZZZZ", "", disable); 
    Student w2 = new Student(222, "CCCCC", "ZZZZZ", "OUT", disable); 
    Student w3 = new Student(222, "BBBBBB", "YYYYYYY", "IN", disable); 

    employeeList.add(w1); 
    employeeList.add(w2); 
    employeeList.add(w3); 

} 

public void EnableInputText(SelectEvent event) { 


    for(int i=0;i<=selectedEmployees.size();i++){ //Assuming you have declared as List 
     for(int j=0;j<=employeeList.size();j++){   
     if(selectedEmployees.get(i).getId().equals(employeeList.get(j).getId())) 
     { 
      employeeList.get(j).setDisable(false); 
      break; 
     } 
     } 
    } 
} 

The Student Bean:

public class Student { 
    private Integer id; 
    private String name; 
    private String location; 
     private String remarks; 
     private boolean disable; 

    public Student(Integer id, String name, String location, String remarks, boolean disable){ 
        this.id = id; 
        this.name = name; 
        this.location = location; 
        this.remarks=remarks; 
        this.disable=disable; 
      } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setRemarks(String remarks) { 
     this.remarks = remarks; 
    } 

    public String getRemarks() { 
     return remarks; 
    } 

    public void setDisable(boolean disable) { 
     this.disable = disable; 
    } 

    public boolean isDisable() { 
     return disable; 
    } 

Und in der Bohne, ich bin vor Schwierigkeiten beim Aktivieren des inputText für den Eintrag, wenn die Zeile angekreuzt ist. Könnten Sie mir bitte helfen? Jetzt habe ich den Fehler: java.lang.IndexOutOfBoundsException: Index: 3, Größe: 3, wenn ich tick und Checkbox

+0

für funktioniert hat nicht deaktiviert Tag-Attribute. Ist es EingabeText? – Unknown

+0

@Unknown Entschuldigung, es war ein Fehler – 99maas

Antwort

1

Das erste, was Sie selectionMode="multiple" verwenden es bedeutet, dass es mehrere Zeilen mit Textfield nächsten aktiviert sein statt Dieser:

<h:inputText value="#{emp.remarks}" disabled="#{empBean.enable}" /> 

Schreib

<h:inputText value="#{emp.remarks}" disabled="#{emp.enable}" /> 

Mittel deklarieren eine Variable enable im Bean selbst danach:

for(int i=0;i<=selectedEmployees.size();i++){ //Assuming you have declared as List 
    for(int j=0;j<=empList.size();j++){   
    if(selectedEmployees.get(i).getId().equals(empList.get(j).getId()){ 
     empList.get(j).setEnable(false); 
    } 
    } 
    } 

vor Ihnen dies für das die textField für Liste alle ein for loop und deaktivieren Sie schreiben kann rowUnselect

+0

Es gibt mir einen Fehler auf der GetId und Equals, die in der dritten Zeile in Ihrem Code besagt, dass getId Methode nicht gefunden und equals Methode nicht gefunden – 99maas

+0

aktualisiert 'for loop' bitte versuchen Sie es jetzt und dieser Fehler kam Becoz Ich vermisste eine Sache in for-Schleife. und in deiner Bean sollte das Feld 'Integer id' und die benötigten Setter und Getter sein. – techipank

+0

Ich bekomme einen Fehler in java.lang.IndexOutOfBoundsException: Index: 3, Größe: 3 – 99maas