如何解决筛选几个打开的Faces数据表
| 我在同一视图页面(overview.xhtml)中有3个openFaces<o:datatable />
。
第一个显示所有乐队的列表
2d会显示乐队演奏的所有歌曲的列表
3d会显示音乐乐队提供的所有节目的列表
我正在使用<o:inputTextFilter />
过滤使用的第一个数据表
行ID(
<h:form>
<o:datatable value=\"#{bandBean.items}\" var=\"band\" ........<o:inputTextFilter
expression=\"#{band.id}\" .../>
</h:form>
<h:form>
<o:datatable value=\"#{showBean.items}\" var=\"show\" ........<o:inputTextFilter
expression=\"#{band.id}\" .../>
</h:form>
<h:form>
<o:datatable value=\"#{songBean.items}\" var=\"song\" ........<o:inputTextFilter
expression=\"#{band.id}\" .../>
</h:form>
歌曲和表演是乐队的子对象。
我真正需要的是能够使用过滤3个数据表的功能
相同的inputTextFilter或类似的东西,因为3个数据表的每个列都有band ID。
用户将永远不会接受三次键入乐队ID
BAND表的tilme,shows表和第二次的tilme
歌曲表第三次使用3个过滤器。相反,他想打一次乐队
ID,并立即过滤3个表。
一种解决方法是使用三个<o:inputTextFilter />
并使用javascript或ajax设置其值:当用户在过滤器中键入内容时,所键入的值会立即附加到其他过滤器中。我不知道这种解决方法。但是显示3个过滤器而用户只能使用一个过滤器似乎很奇怪。
任何想法和帮助都是宝贵的!
解决方法
不直接支持将过滤器附加到多个表,
但是,您可以模拟这种行为。为此,您可以附加一个
隐藏(\“显示:无\”)到每个表
使用\“ for \”属性,并为所有
他们以编程方式。
这是一个简单的代码片段,展示了这个想法:
<o:inputText value=\"#{MyBean.filterText}\"/>
<o:commandButton value=\"Submit\" action=\"#{MyBean.filterAllTables}\"/>
<o:inputTextFilter for=\"table1\" expression=\"#{book.bookTitle}\"
value=\"#{MyBean.filterCriterion}\" style=\"display: none\"/>
<o:inputTextFilter for=\"table2\" expression=\"#{book.bookTitle}\"
value=\"#{MyBean.filterCriterion}\" style=\"display: none\"/>
<o:dataTable id=\"table1\" ...>
<o:dataTable id=\"table2\" ...>
MyBean.java:
private String filterText; // a property w/ getter/setter
private ExpressionFilterCriterion filterCriterion; // a property w/ getter/setter
public void filterTables() {
String filterText = getFilterText();
SimplePropertyLocatorFactory.SimplePropertyLocator propertyLocator =
new SimplePropertyLocatorFactory.SimplePropertyLocator(\"id\"); // \"id\" is a property name by which you\'d like to filter
ExpressionFilterCriterion filterCriterion = new ExpressionFilterCriterion(
propertyLocator,FilterCondition.CONTAINS,filterText);
setFiterCriterion(filterCriterion);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。