2016-03-10 2 views
0

В моем JSF 2.2, Primefaces 5.3 веб-приложения, я хочу, чтобы пользователь, чтобы посетить представление с состоянием предопределенного фильтра (например, в зависимости от его учетной записи пользователя)Программных применить фильтр к PrimeFaces 5 DataTable

Для достижения этой цели, я попытался программно применить фильтр к dataTable (т. е. из бэк-файла).

В моей бэк-боб я попробовал:

@ManagedBean 
@ViewScoped 
public class MyCointroller 
private DataTable dataTable = new DataTable(); 

@PostConstruct 
public void init() { 
    Map<String, Object> myFilter = new HashMap<String, Object>(); 
    myFilter.put("userName", "Peter"); 
    dataTable.setFilters(myFilter); 
} 

Где я использую "связывания" с DataTable в моей facelet.

<p:dataTable var=user" 
     value="#{myController.users}" 
     binding="#{myController.dataTable}"> 

     <p:column headerText="Bezeichnung" 
      filterMatchMode="contains" filterBy="#{user.name}"> 
      <h:outputText value="#{user.name}" /> 
     </p:column> 

Связывание сам работает, я могу прочитать примененные фильтры из моего бэк-бобов, но я не в состоянии применить myFilter к DataTable (таблица не фильтруется в представлении).

+0

Какого типа 'myController.user'? –

+0

извините, была опечатка, должна быть «пользователями». myController.users - это ArrayList

ответ

1

Вы должны активировать действие фильтра в javascript для вашей таблицы при загрузке страницы. Попробуйте добавить widgetVar атрибута для DataTable widgetVar="userTable" и добавить яваскрипт код вашей странице XHTML:

<script> 
     $(document).ready(function() { 
      PF('userTable').filter() 
     } 
</script> 
Смежные вопросы