2015-08-08 30 views
0

我有下面的代碼,有可能是用戶鍵入的東西有沒有自動建議可用,但仍然希望由用戶輸入的文本的情況下。 我的onClick函數確實被調用,但我想獲得用戶具有類型的值。autoComplete - action&onClick

我已經嘗試了下面的方法,但似乎沒有工作。

自動完成標籤

<p:autoComplete id="cityInput" 
       value="#{myBean.text}" 
       style="margin-right:15px;" 
       completeMethod="#{myBean.fetchData}" 
       global="false" 
       forceSelection="true" 
       maxResults="5"> 
</p:autoComplete> 

按鈕

<p:commandButton id="searchCity" 
       value="Search" 
       icon="ui-icon-search" 
       onclick="captureSearchText();" 
       action="#{myBean.search}"/> 

腳本

<script type="text/javascript"> 
    function captureSearchText(){ 
     alert("88"); 
     //var searchVal = myAutoComplete.input.val(); 
     //var searchVal = document.getElementById("cityInput"); 
     //alert(searchVal.value); 
     //return true; 
    } 
</script> 

編輯區域

當我按下ENTER鍵,我得到了我的fetchData搜索字符串,也許是因爲它是p:commandButton。但在點擊按鈕也我想獲得搜索文本。我希望現在很清楚。我可以做什麼來獲得搜索文本鼠標點擊搜索按鈕。嘗試調用JavaScript函數。

+0

爲什麼不直接讓completeMethod返回用戶輸入的內容? – Kukeltje

+0

@Kukeltje請讓我知道它究竟會如何工作,如果可能將其作爲語法答案發布,我剛剛開始了這個,所以不太瞭解。 –

+0

嗯,這只是將搜索參數添加到結果中,如果它們是空的。沒什麼特別的。不需要整個捕捉事物......而且我很難從我的手機創建代碼答案。 – Kukeltje

回答

2

在completeMethod #{myBean.fetchData}只是返回用戶輸入的搜索字符串,如果真正的「搜索」沒有產生任何結果。

public List<String> fetchData(String query) { 
    List<String> results = searchService.search(query); 
    if (results.isEmpty() { 
     results.add(query); 
    } 
    return results; 
} 

事實上,沒有什麼'jsf'這個簡單的java創意。

但是用戶仍然必須選擇它,除非自動完成功能具有自動選擇選項。不確定這一點。但你也可以查詢字符串變量存儲服務器端和使用,如果用戶不選擇任何內容(該字段設置爲需要的是更好,然後IMO)

public List<String> fetchData(String query) { 
    List<String> results = searchService.search(query); 
    this.queryString = ""; 
    if (results.isEmpty() { 
     results.add(query); 
     this.queryString = query 
    } 
    return results; 
} 

或者,如果你總是將它的ifEmpty外想要存儲它

0

forceSelection="true"實際上是一個問題,它是強制選擇。 我已將其移除並順利運行。

回答@Kukeltje也不錯,但這是一個解決方法,forceSelection="true"實際上是根本原因。