2017-02-17 11 views
0

Я просто помещаю свой тег столбца Primefaces внутри помеченной оберткой, как показано ниже, однако выражения sortBy и filterBy EL вычисляются неправильно и не передаются на метод загрузки в моей LazyModel.Поверхности filterBy и sortBy пусты и EL не оцениваются

В принципе, у меня есть тег следующий пример: колонка:

<ui:composition 
xmlns:c="http://java.sun.com/jsp/jstl/core" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:p="http://primefaces.org/ui" 
xmlns:ang="http://ang.com/jsf/facelets"> 

<p:column headerText="#{label}" sortable="#{sort}" sortBy="#{property}" filterBy="#{property}" filterable="#{filter}" filterMatchMode="#{filterMatchMode}"> 
    <h:outputText value="#{property}" /> 
</p:column> 

В моей основной части кода я делаю следующее:

<p:dataTable id="mainTable" widgetVar="tblTable" var="c" 
     value="#{applicationBean.lazyModel}" lazy="true" 
     paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
     paginator="true" rows="10" style="margin-bottom:20px" 
     selectionMode="single" selection="#{applicationBean.selected}" 
     paginatorPosition="bottom" rowKey="#{c.id}"> 

     <ex:column label="First Name" property="#{c.firstName}" 
      filter="true" sort="true" filterMatchMode="contains" /> 

Однако, когда мой метод данные загрузки вызывается в моем Lazy Load bean, столбцы sortBy и filterBy передаются как «свойство» вместо «firstName».

public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) 

Любые идеи, почему выражение EL не вычисляется в filterBy и sortBy внутри тега?

Только для вашей информации колонка отображается правильно. Я вижу весь контент внутри таблицы, однако, когда я нажимаю для сортировки или фильтрации, я получаю исключение, что свойство не существует.

Я попытался сыграть с полем = "# {property}" вместо sortBy и filterBy, однако он просто работает для sortBy; фильтр по-прежнему остается пустым, когда я использую атрибут поля.

+0

Попробуйте разделить свою собственность на '' bean' и field' для предотвращения EL, чтобы оценить, как вы передаете его к вашему компонент. В вашем XHTML используйте 'bean =" # {c} "field =" firstName "', и в вашем компоненте используйте 'sortyBy =" # {bean [field]} "'. –

+0

Джаспер, обратите внимание, что Боб не держит само поле. Это var, полученный из таблицы. Хотя я и пытался. Нагрузка метода теперь получает строку «bean [field]». Выражение все еще не оценивается. XHTML: bean = "# {c}" field = "firstName"; Компонент: filterBy = "# {bean [field]}" -> load вызывается с помощью String = bean [field] вместо оценки выражения EL. Я также попробовал filterBy = "# {field}", и мой метод получает поле String вместо "firstName". –

+0

Джаспер, используя вашу идею, получил следующий ответ: 1-split var и имя поля; 2 - вставьте имя поля в полевую переменную. XHTML: var = "# {c}" field = "firstName"; Компонент: field = "# {field}" sortBy = "# {field}" filterBy = "# {field}". «Поле» - самая важная часть здесь; если вы его не используете, это не сработает. –

ответ

0

Решение

Убедитесь, что тег использовать 3 элемента: поля, SortBy и filterBy; все эти элементы просто получают имя поля, а не var/bean.

XHTML:

<ex:column label="First Name" var="#{c}" field="firstName" 
    filter="true" sort="true" filterMatchMode="contains" /> 

Компонент:

<p:column headerText="#{label}" field="#{field}" sortBy="#{field}" 
    filterBy="#{field}" sortable="#{sort}" filterable="#{filter}" 
    filterMatchMode="#{filterMatchMode}"> 
     <h:outputText value="#{var[field]}" /> 
</p:column> 
Смежные вопросы