繁体   English   中英

richfaces suggestionBox将附加值传递给辅助bean

[英]richfaces suggestionBox passing additional values to backing bean

使用RichFaces suggestionBox如何将带有文本输入的页面中的多个id或值传递给suggestionBox支持bean。 即:显示选定州内的建议城市列表? 这是我的autoComplete方法。

public List< Suburb > autocomplete(Object suggest)
{
    String pref = (String) suggest;
    ArrayList< Suburb > result = new ArrayList< Suburb >();

    Iterator< Suburb > iterator = getSuburbs().iterator();
    while( iterator.hasNext() )
    {
        Suburb elem = ((Suburb) iterator.next());
        if( (elem.getName() != null && elem.getName().toLowerCase().indexOf( pref.toLowerCase() ) == 0) || "".equals( pref ) )
        {
            result.add( elem );
        }
    }
    return result;
}

正如您所看到的,页面传递了一个值, Object建议,这是h:inputText (在faceLets m:textFormRow

<m:textFormRow id="suburb" label="#{msgs.suburbPrompt}" 
    property="#{bean[dto].addressDTO.suburb}"
    required="true" maxlength="100" size="30" />

<rich:suggestionbox height="200" width="200" usingSuggestObjects="true"
    suggestionAction="#{suburbsMBean.autocomplete}" var="suburb" for="suburb"
    fetchValue="#{suburb.name}" id="suggestion">
    <h:column>
        <h:outputText value="#{suburb.name}" />
    </h:column>
</rich:suggestionbox>

在页面的前面,您可以选择一个州,我想用它来削减建议框显示的郊区列表。

(免责声明:我知道这个问题很久以前就被问过了,但也许这会帮助有类似问题的人...)

查看此博文文章,其中涉及类似的内容: RichFaces - SuggestionBox和隐藏字段

关键是使用<f:setPropertyActionListener value="#{...}" target="#{...}">包含在<a4j:support event="onselect" ajaxSingle="true"> 当为SuggestionBox触发onselect时,这可用于为辅助bean设置附加值。

通过这种方法,我设法创建一个SuggestionBox,显示(和自动填充)客户的名称,但在选择时为bean设置一个完整的客户对象 (具有几个属性;由id标识)。

<rich:suggestionbox使用<f:parameter标记吗?

您可以使用rich:suggestionbox<f:parameter选项卡。 我的任务是根据list元素的某些属性过滤列表,有时可以忽略该属性。 就像,有时我想要一份只有柑橘类水果的清单,有时我想要整个可用水果清单。

在页面中:

<rich:suggestionbox usingSuggestObjects="true"
        suggestionAction="#{listBuilder.autocompleteFilterFruit('')}" var="ind"
        for="fruitInput" fetchValue="#{fruit.name}" id="suggestion" >
    <f:param name="constrainInd" value="#{basket.isConstrainedToCitrus}" />

    ...

</rich:suggestionbox>

我有一个类( Basket )知道列表是否必须特殊过滤,另一个类( ListBuilder )构建列表。

Basket

public Boolean getIsConstrainedToCitrus ()
{
    return new Boolean ( logic that answers "is this basket for citrus only" );
}

在ListBuilder中:

public List<Fruit> autocompleteFilterFruit (Object arg)
{
    List<Fruit> rtnList = new ArrayList<Fruit> ();

    String suggestion = (String) arg;

    // get the filter control that the page retrieved from the Basket
    //
    Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext ().getRequestParameterMap();
    boolean isConstrainedToCitrus = "true".equals (params.get ("constrainInd"));

    // allFruit is a pre-initialized list of all the available fruit. use it to populate the return list according 
    // to the filter rules and matches to the auto-complete suggestions
    for (Fruit item : allFruit)
    {
        if ((!isConstrainedToCitrus || item.isCitrus())  &&  item.name.startsWith(suggestion))
        {
            rtnList.add (item);
        }
    }
    return rtnList;
}

你看过这个RichFaces的SuggestionBox 演示吗? 示例下面有链接来查看源代码。

编辑:

听起来在用户输入suggestionBox之前你需要bean中的state值。 我将使用RichFaces ajax支持将状态值传递给bean,因此当调用autocomplete方法时,用户在页面上选择的状态将填充郊区列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM