autoComplete - action&的onClick

时间:2015-08-08 04:11:27

标签: jsf primefaces autocomplete onclick

我有下面的代码,可能有一种情况,当用户输入没有可用的自动建议的东西,但我仍然想要用户输入的文本。 我的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函数。

2 个答案:

答案 0 :(得分:2)

在completeMethod #{myBean.fetchData}中,只需返回用户输入的搜索字符串,如果真实的搜索字符为&#39;不会产生任何结果。

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

实际上没有什么&#39; jsf&#39;对此,简单的java创造力。

但是除非自动完成具有自动选择选项,否则用户仍然必须选择它。对此不确定。但是您也可以将查询字符串存储在变量服务器端,如果用户没有选择任何内容,则使用该字符串(将字段设置为required要比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之外

答案 1 :(得分:0)

forceSelection="true"实际上是一个问题,它迫使选择。 我已将其删除,并且运行顺利。

@Kukeltje的答案也很好,但这是一种解决方法,execFile实际上是根本原因。