rich:autocomplete奇怪的行为

时间:2014-01-10 07:20:51

标签: jsf-2 richfaces

我们正在从jsf 1.2升级到jsf 2。 我们正在使用apache myfaces 2.1和富面4.3。

<rich:autocomplete>我们面临着非常奇怪的问题。下面是xhtml代码。

  <rich:autocomplete mode="cachedAjax" minChars="2" autocompleteMethod="#{bean.getData}"  
                    var="result" value="#{bean.inputData}">
                                <h:column>
                                <h:outputText value="#{result}" />
                            </h:column> 
  </rich:autocomplete>

以下是场景,当在自动完成输入框中输入输入时,会显示建议 - 即调用bean.getData方法。 令人惊讶的是,在选择任何建议之后,使用所选的选项值再次调用bean.getData方法,我认为这不是正确的行为 因为用户选择了一个选项而没有输入任何输入。

我不希望再次调用bean.getData方法。还有其他选择吗?

请帮忙。

编辑1 由于我正在运行db查询以获取建议值,因此它们与为获取建议而键入的实际输入值不同。那就是如果我输入“at”,我的sugegstions可能会“检查我”。我理解,一旦搜索前缀发生变化,建议会再次进行评估,但在这里我不会更改前缀,而是选择整个建议值。

编辑2 提供问题所带来的背景。

当调用autoCompleted方法时,它会使用CustomUserObject作为值填充所有建议的hashMap。 以下是此代码:

 public List<String> getData(FacesContext context, UIComponent component, String input) {

    Map<String, CustomUserObject> userMap = new HashMap<String, CustomUserObject>();
    //get users from db 
List<CustomUserObject> users = bean.fetchUserList(input);

//put users in map 
    for (CustomUserObject user : users) {
        userMap.put(user.id, user) ;
    }

    List<String> userList = new ArrayList<String>();

    //convert the list to List<String> 
    if(userList != null && !userList.isEmpty()){

        //convert the List<CustomUserObject> to List<String>
    }
    return userList;
}

现在由于问题中提到的问题,再次调用getData并破坏userMap。 此映射用于通过将其与选定的Suggestion进行比较来检索正确的CustomUserObject,如下所示:

if(userMap != null && !userMap.isEmpty()){
            for(CustomUserObject user : userMap.values()){


                if(selectedSuggestion != null && selectedSuggestion.equals(user.name)){
                    //match is found 
                //set variables to update ui at re-render 

                }
                //no match found  
            //set variables to update ui at re-render

            }
        }

编辑3 除了上述问题之外,rich:autocomplete的{​​{1}}似乎没有“无标签”属性,当找不到结果时,rich:suggestionBox会显示该属性。 这个问题以及上述问题确实让这个组件与rich:suggestionBox

一样工作变得困难

0 个答案:

没有答案