autoComplete - action & 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> 按钮/strong>
<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>
<<p> 编辑部分/strong>

当我按下ENTER键时,我在fetchData中得到搜索字符串,可能是因为它是p:commandButton。但是在上单击按钮我也想得到搜索的文本。我希望现在一切都清楚了。我能做些什么来获得搜索文本的鼠标点击搜索按钮。

在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创造力。

但是用户仍然必须选择它,除非自动完成有一个自动选择选项。我不确定。但是你也可以将查询字符串存储在一个可变的服务器端,如果用户不选择任何东西(将字段设置为required会更好)

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之外如果你总是想要存储它

forceSelection="true"实际上是一个问题,它是强制选择。我已经把它移走了,它运行得很顺利。

@Kukeltje的回答也很好,但这是一个变通办法,forceSelection="true"实际上是根本原因。

相关内容

  • 没有找到相关文章

最新更新