【问题标题】:Primefaces populate other columns values based on selection of autocompletePrimefaces 根据自动完成的选择填充其他列值
【发布时间】:2012-12-31 16:16:49
【问题描述】:

我正在使用 Primefaces AutoComplete,我正在使用 Hibernate 从数据库中获取记录。

当我输入文本时,我可以从数据库中选择值。我想要实现的是,当我在输入字符时选择一个名称时,我希望 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;
    }

【问题讨论】:

    标签: java jsf-2 autocomplete primefaces


    【解决方案1】:

    使用&lt;p:ajax event="itemSelect"...

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

    【讨论】:

    • 我试过&lt;p:ajax event="itemSelect" update="empnum" /&gt;&lt;h:outputLabel id="empnum" value="empNum" for="emp" /&gt; &lt;p:inputText id="emp" value="#{myMB.selectedEmployee.employeeNumber}" &gt; &lt;/p:inputText&gt; 但是employeeNumber 是空白的,即为空。
    • 不确定你要重新渲染什么,但你可以用h:panelGroup id="someId" 包裹h:outputLabel 和p:inputText 并将p:ajax 更改为&lt;p:ajax event="itemSelect" update="someId" /&gt;
    • Daniel 在说someId 的其他列中,我如何从bean 中检索或显示值?你能举个例子吗?谢谢
    • 喜欢这里:primefaces.org/showcase/ui/autoCompletePojo.jsf?只需使用var 属性.. 你也可以使用任何其他 el 表达式...
    • Daniel 我这里有两个问题,一个是我的其他字段或列在 之外,第二个即使我的其他列在 之内,我也可以看到这些值这些列中只有当它显示为下拉列表时,一旦我选择了一个名称,我就无法看到其他列的值。理想情况下,如果我选择一个名称,我希望填充其他列,例如 EmployeeNumber、Department。谢谢
    猜你喜欢
    • 2012-12-24
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2017-10-29
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多