2013-01-17 148 views
1

我正在使用Primefaces自動完成,並使用Hibernate從數據庫獲取記錄。Primefaces根據選擇的自動完成填充其他列值

我可以在輸入文本時從數據庫中選擇值。我想實現的是當我輸入字符時選擇一個名稱,我希望我的其他列在jsf頁面中填充。例如,當我選擇員工姓名「SMITH」時,我想要員工編號,部門填寫SMITH的員工編號和部門。

我在jsf頁面中有以下內容。

<p:autoComplete value="#{myMB.selectedEmployee}" 
          id="basicPojo" minQueryLength="3" 
          completeMethod="#{myMB.complete}" var="p" 
          itemLabel="#{p.empName}" 
          converter="#{myconverter}" 
          forceSelection="true" > 

<h:outputLabel value="Emp Number" /> 
         <h:outputText value="#{p.employeeNumber}" /> 

<h:outputLabel value="Department" /> 
         <h:outputText value="#{p.employeeDepartment}" /> 
        </p:autoComplete> 

當我選擇一個名稱時,其他字段不會顯示。

這可能是什麼原因?我怎樣才能達到預期的效果?

任何幫助,高度讚賞。

編輯1

<p:dialog header="Create New Request" style="font-weight:bold" 
        widgetVar="requestNewDialog" resizable="false" 
     id="newDlg"    
    showEffect="fade" hideEffect="fade" appendToBody="true" 
     modal="true" position="center top" width="850" height="450"> 
        <h:panelGrid columns="2" cellspacing="2"> 
         <h:outputText value="New Employee No:" /> 
         <h:outputText value="" /> 
        </h:panelGrid> 
        <p:separator /> 
        <p:panelGrid columns="6">  
         <h:outputLabel value="Employee # " for="emp" /> 
         <p:autoComplete value="# 
         {myMB.selectedEmployee}" 
       id="basicPojo" minQueryLength="3" 
       completeMethod="#{myMB.complete}" var="p" 
       itemLabel="#{p.longName}" 
         converter="#{employeeNameConverter}" 
       forceSelection="true" > 
       <p:ajax event="itemSelect" update="num" 
         listener="#{myMB.handleSelect}" />  
      <h:outputLabel value="Name" for="name" /> 
      <h:outputText value="#{p.employeeNumber}" /> 
      </p:autoComplete>      

     <h:outputLabel id="num" value="Department" for="dept" /> 
     <p:inputText id="dept" value="#{p.employeeNumber}" > 
         </p:inputText> 
      </p:panelGrid> 
    <p:separator /> 
     </p:dialog> 

ManagedBean完整方法

public List<Employee> complete(String query) { 
     List<Employee> suggestions; 
     suggestions = new ArrayList<Employee>(); 
     try { 

      EmployeeQueryData q = new EmployeeQueryData();    
      getService().getEmployee(q,query);    
      employee = q.getResult();  
      for (Employee p : employee) { 
       if (p.getEmpName().toLowerCase().contains(query)); 
        suggestions.add(p); //    
      } 
     } catch (Exception e) {    
     }  
     return suggestions; 
    } 

回答

4

使用<p:ajax event="itemSelect"...

<p:autoComplete>... 
    <p:ajax event="itemSelect" update="someOtherFieldId someOtherFieldId2" /> 
</p:autoComplete> 
+0

我試圖爲' \t \t \t \t \t \t \t \t \t \t \t \t'然而employeeNumber是空的,即爲空。 – user75ponic

+0

不確定你想渲染什麼,但你可以用'h:panelGroup id =「someId」'包裝'h:outputLabel'和'p:inputText',並將'p:ajax'改爲'

' – Daniel

+0

Daniel在另一個說'someId'的列中,我如何從bean中檢索或顯示值?你能提供一個例子嗎?感謝 – user75ponic

相關問題