簡體   English   中英

如何基於rowSelect事件更新要啟用或禁用的dataTable中的特定inputText

[英]How to update specific inputText in dataTable to be enabled or disabled based on rowSelect event

一旦選中行中的復選框,我需要您的幫助來更新要在dataTable中啟用的特定inputText組件。 這是dataTable的代碼:

<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>

以及支持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);
        }
       }
     }
}

目前,我將能夠單擊該復選框,但是inputText將保持禁用狀態,並且會出現錯誤:

java.lang.UnsupportedOperationException

與Primefaces相比,您的問題與Java有關。

該問題似乎是selectedEmployees.get(j).setDisable(false);

有更多機會獲得java.lang.IndexOutOfBoundsException

您只需要在事件觸發后更新數據表即可。

<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"/>

在復選框上選擇:

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);
                }
            }
        }
    }

在行上選擇:

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);
            }
        }

    }

在復選框上取消選擇

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

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

輸出:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM