2013-06-18 106 views
1

我們使用Primefaces 2.2.1。 我們使用自動完成來顯示數據庫中的名稱。其中一些名稱的'&'作爲它的一部分。例如:Jack & Jill。Primefaces自動完成未通過並完成方法

當我們在自動完成中輸入&時,建議停止在'&'之前的字符處。

姓名:Jack & Jill,Jackie,Jack & Bill,Jack & Jen。

當輸入「Jack」時,我們會在建議列表中獲得所有上述名稱。 而當我們輸入「傑克&」,我們仍然會得到相同的列表,而不是縮小到 「傑克&吉爾」,「傑克&比爾」,「傑克&仁」

當我們調試正在傳遞什麼到完整的方法,我們只注意到'&'通過之前的字符。例如:'傑克'。

「&」之後鍵入的任何內容,包括「&」本身未被傳遞給完整的方法。我們從Primefaces論壇上找到使用轉換器,但還是沒用。儘快提出建議,因爲這是一個非常關鍵的問題,要儘快解決。

這裏是bean代碼。

public List<String> complete(String nameQuery) 
{ 
    List<String> names = new ArrayList<String>(「Jack & Jill」, 「Jackie」, 「Jack & Bill」, 「Jack & Jen」); 
    List<String> suggestedNames= new ArrayList<String>(); 

    for (String name : names) { 
     if (name.toLowerCase().trim().startsWith(nameQuery.toLowerCase().trim())) 
     { 
     suggestedNames.add(name.toUpperCase()); 
     } 
    } 
    return suggestedNames; 
} 

XHTML代碼

<p:autoComplete id="stName" 
    value="#{webBean.personVO.name}" 
    completeMethod="#{webBean.complete}" 
    selectListener="#{webBean.updateSelectedName}" 
    onSelectUpdate="name" 
    maxResults="10"> 

在此先感謝。

+0

我認爲你應該發佈自動完成bean代碼,以提高你的問題的可見性。 – Akheloes

+0

這是bean代碼。 (「Jack&Jill」,「Jackie」,「Jack&Bill」,「Jack&Jen」);以及其他名稱。 列表 suggestedNames = new ArrayList (); (name.toLowerCase()。trim()。startsWith(nameQuery.toLowerCase()。trim())){ suggestedNames.add(name。 for(String name:names){ iftoUpperCase()); } } return suggestedNames; } – user2498630

+0

XHTML代碼 user2498630

回答

0

嘗試addinng的的OnStart屬性的號碼:

<script type="text/javascript"> function escapeTerm(request) { request.term = encodeURIComponent(request.term); } </script>

<p:autoComplete id="stName" value="#{webBean.personVO.name}" onstart="escapeTerm(request)" completeMethod="#{webBean.complete}" selectListener="#{webBean.updateSelectedName}" onSelectUpdate="name" maxResults="10">

0

:調用JavaScript函數編碼正在爲您查詢傳遞給整個方法的字符自動完成標籤來自:http://code.google.com/p/primefaces/issues/detail?id=6378

此解決方案適用於我添加到我的JSF頁面:

<script type="text/javascript"> 
    PrimeFaces.escapeRegExpOld = PrimeFaces.escapeRegExp; 
    PrimeFaces.escapeRegExp = function (c){ 
     var t = PrimeFaces.escapeRegExpOld(c); 
     t = t.replace('&amp;', '&amp;amp;'); 
     return t; 
    } 
</script>