[英]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.