p:autoComplete在IE8中不能正常工作

时间:2014-02-14 16:05:04

标签: primefaces autocomplete

我想在我的网站上添加一个自动完成字段,我从PrimeFaces找到了p:autoComplete。我以前从未使用过PrimeFaces所以我遵循了tutorial

只要我通过http://localhost:8080/myWebsite访问我的网站,但是当我尝试通过http://192.168.34.179:8080/myWebsite(或从我的网络中的任何其他计算机)访问时,这一切似乎都可以在IE8和Chrome上正常运行完成不适用于IE8(它在Chrome上运行正常)。

该网站部署在GlassFish Server 3.1.2上,我正在使用带有PrimeFaces 3.2的JavaServer Faces 2.1

Xhtml代码:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>TPM Log</title>
    <h:outputStylesheet name="tpm.css"/>
</h:head>
<h:body>
    <h1>
        <h:outputText value="Preventive Maintenance Daily Walk Around Log"/>
    </h1>

    <h:form id="AddTpmLog">
        <p:autoComplete id="operator1" value="#{databaseManagedBean.name}"                  
       completeMethod="#{autoCompleteBean.complete}"/>

    </h:form>

</h:body>

autoCompleteBean的代码:

package Beans;

import entities.Operators;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped
public class AutoCompleteBean implements Serializable {

    @ManagedProperty(value = "#{databaseManagedBean}")
    private DatabaseManagedBean dbBean;

    public List<String> complete(String query) {
        List<String> results = new ArrayList<String>();

        for (Operators operator : dbBean.getOperators()) {

            if (operator.getFirstName().toLowerCase().startsWith(query.toLowerCase())) {
                results.add(operator.toString());
            } else {
                if (operator.getLastName().toLowerCase().startsWith(query.toLowerCase())) {
                    results.add(operator.toString());
                }
            }
        }

        return results;
    }

    /**
     * @return the dbBean
     */
    public DatabaseManagedBean getDbBean() {
        return dbBean;
    }

    /**
     * @param dbBean the dbBean to set
     */
    public void setDbBean(DatabaseManagedBean dbBean) {
        this.dbBean = dbBean;
    }
}

DatabaseManagedBean是一个负责与MySQL服务器通信的Bean,从中提取自动完成字段的列表。

我没有想法如何修复它。

1 个答案:

答案 0 :(得分:0)

有几件事。

  • 您正在将视图与数据库管理器bean耦合。我会在AutoCompleteBean中有一个var,它存储字段的值,然后根据需要使用该var,
  • 我想dbBean.getOperators()获取db上的所有运算符。这样,您将从数据库获取所有数据并在视图上执行过滤。我会做这样的事情。

    public List complete(字符串查询){
       列表结果= new ArrayList();
       for(运算符运算符:dbBean.getOperatorsFiltered(query)){
            results.add(operator.toString());
       返回结果;
    }

dbBean.getOperatorsFiltered(query)将使用适当的clasule对数据库进行查询。

另请注意,Primefaces展示会更新为primefaces 4。