Jsf 在primefaces数据表筛选器中设置默认值
我在datatable上使用primefaces v3.5。我在一列上使用filter。Jsf 在primefaces数据表筛选器中设置默认值,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我在datatable上使用primefaces v3.5。我在一列上使用filter。 加载页面本身时,如何为过滤器设置默认值。理想情况下,获取对数据表的引用(通过将视图数据表绑定到支持bean表示或遍历DOM树)并执行此操作 Map<String,String> theFilterValues = new HashMap<String,String>(); theFilterValues.put("filterColumn","fooValue");
加载页面本身时,如何为过滤器设置默认值。理想情况下,获取对数据表的引用(通过将视图数据表绑定到支持bean表示或遍历DOM树)并执行此操作
Map<String,String> theFilterValues = new HashMap<String,String>();
theFilterValues.put("filterColumn","fooValue");
myDataTable.setFilters(theFilterValues);
Map theFilterValues=newhashmap();
filtervalues.put(“filterColumn”、“fooValue”);
setFilters(filtervalues);
将设置默认文本值,但可能不应用筛选器
或者,在primefaces问题队列中,建议使用基于jquery的选项
<script>
jQuery(document).ready(function() {
jQuery('input[id*="datumCol"]').val('2012-07-17');
});
</script>
jQuery(文档).ready(函数(){
jQuery('input[id*=“datumCol”]')).val('2012-07-17');
});
在primefaces中使用column标记的filterValue属性,例如
<p:datatable ... widgetVar="dataTableWidgetVar">
<p:column ... filterValue="#{BackingBean.defaultValue}">
然后,在javascript中创建一个简单的函数调用,用于在页面准备就绪时触发过滤器(小部件变量是通过PF中的jQuery创建的):
$j=jQuery;
$j(文档).ready(函数(){
dataTableWidgetVar.filter();
});
正确的解决方案是使用p:dataTable
的filterdvalue
属性,该属性包含过滤后的集合以及p:column
的filterdvalue
属性,向用户显示过滤器配置
要将p:dataTable
过滤器存储在会话bean中,还必须保留过滤后的数据。p:dataTable
不会为您执行初始排序
检查这个JSF示例:
<p:dataTable
value="#{usersBean.employees}"
var="e"
filteredValue="#{userListState.filteredValue}">
<p:ajax event="filter" listener="#{userListState.onFilterChange}"/>
<p:column
headerText="user"
filterBy="#{e.user.id}"
filterValue="#{userListState.filterState('user.id')}">
#{e.user.id}
</p:column>
</p:dataTable>
#{e.user.id}
使用此托管bean支持:
@Named(value = "userListState")
@SessionScoped
public class UserListState implements Serializable{
private Map<String, String> filterState = new HashMap<String, String>();
private List<Employee> filteredValue;
public UserListState() {
}
public void onFilterChange(FilterEvent filterEvent) {
filterState = filterEvent.getFilters();
filteredValue =(List<Employee>) filterEvent.getData();
}
public String filterState(String column) {
return filterState.get(column);
}
public List<Employee> getFilteredValue() {
return filteredValue;
}
public void setFilteredValue(List<Employee> filteredValue) {
this.filteredValue = filteredValue;
}
}
@Named(value=“userListState”)
@会议范围
公共类UserListState实现可序列化{
私有映射过滤器状态=新HashMap();
私有列表筛选值;
公共用户列表状态(){
}
过滤器更改上的公共无效(过滤器事件过滤器事件){
filterState=filterEvent.getFilters();
filteredValue=(列表)filterEvent.getData();
}
公共字符串筛选器状态(字符串列){
返回filterState.get(列);
}
公共列表getFilteredValue(){
返回filteredValue;
}
public void setFilteredValue(列表filteredValue){
this.filteredValue=filteredValue;
}
}
在实现LazyDataModel时,我向类构造函数中的类变量添加了一个默认过滤器。在本例中,类变量称为“filters”,并在值为“true”的“isActive”字段上进行过滤:
公共类ExtendedLazyListModel扩展LazyDataModel{
私有最终列表数据源;
私有映射过滤器;
公共扩展LazylistModel(列表数据源){
this.filters=newhashmap();
过滤器。put(“isActive”、“true”);
this.datasource=数据源;
this.setRowCount(datasource.size());
}
然后在Load方法中,我添加了以下代码来设置默认过滤器(仅适用于第一次调用):
公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
//设置默认过滤器
if(filters.isEmpty()){
对于(字段f:datasource.get(0).getClass().getDeclaredFields()){
if(this.filters.containsKey(f.getName())){
filters.put(f.getName(),this.filters.get(f.getName());
this.filters.remove(f.getName());
}
}
}
.....
在本例中,我在XHTML文件中添加了过滤列p:column…:
filterValue=“true”//是我为默认筛选器设置的值:以这种方式,默认值是在筛选器值中设置的。但它不是working@kolussus:通过使用脚本函数,我试图获取默认值。但datatable的加载方法无法获取默认值result@Sagar尝试
$('youredColumnId\\:filter')。触发器('keyup')
要手动触发filter keyup filter事件以实现过滤效果,@SessionScoped
可能是“大的”@ViewScoped
在这里完全可以使用。请参阅@BalusC的帖子:此解决方案不设置过滤值,但不调用过滤。
@Named(value = "userListState")
@SessionScoped
public class UserListState implements Serializable{
private Map<String, String> filterState = new HashMap<String, String>();
private List<Employee> filteredValue;
public UserListState() {
}
public void onFilterChange(FilterEvent filterEvent) {
filterState = filterEvent.getFilters();
filteredValue =(List<Employee>) filterEvent.getData();
}
public String filterState(String column) {
return filterState.get(column);
}
public List<Employee> getFilteredValue() {
return filteredValue;
}
public void setFilteredValue(List<Employee> filteredValue) {
this.filteredValue = filteredValue;
}
}
public class ExtendedLazyListModel<T> extends LazyDataModel<T> {
private final List<T> datasource;
private Map<String, Object> filters;
public ExtendedLazyListModel(List<T> datasource) {
this.filters = new HashMap<>();
filters.put("isActive", "true");
this.datasource = datasource;
this.setRowCount(datasource.size());
}
public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
//set default filter
if (filters.isEmpty()){
for (Field f : datasource.get(0).getClass().getDeclaredFields() ){
if (this.filters.containsKey(f.getName())) {
filters.put(f.getName(), this.filters.get(f.getName()));
this.filters.remove(f.getName());
}
}
}
.....