2017-02-17 13 views
0

私は単純にPrimefacesカラムタグを次のようなタグ付きラッパーの中に入れていますが、sortByとfilterBy EL式は正しく計算されておらず、私のLazyModelでメソッドをロードします。とき私の方法、しかしPrimefaces filterByとsortByが空でELが評価されていない

<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" /> 

:私は次のことをやっているコードの私のメインの部分では

<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> 

:コラム:

基本的に、私は、次のタグの元を持っていますLazy Load Beanでロードデータが呼び出されていますが、sortByカラムとfilterByカラムは "firstName"ではなく "property"として渡されています。

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

EL式がfilterByとsortByタグで計算されない理由はありますか?

ちょうどあなたの情報のために、列は適切にレンダリングされます。私はテーブル内のすべてのコンテンツを見ることができますが、ソートやフィルタリングのためにクリックすると、プロパティが存在しないという例外が発生します。

sortByとfilterByの代わりにfield = "#{property}"でプレイしようとしましたが、sortByの場合は となります。 field属性を使用すると、filter byはまだ空になっています。

+0

あなたにそれを渡すように評価されるELを防ぐために 'bean'と' field'にあなたの財産を分割するようにしてください成分。あなたのXHTMLでは、 'bean ="#{c} "フィールド=" firstName "'を使用し、コンポーネントでは 'sortyBy ="#{bean [field]} "'を使用します。 –

+0

ジャスパーは、豆はフィールド自体を保持していないことを観察します。それはテーブルから派生したvarです。でも、私は試しました。メソッドのロードは現在、 "bean [field]"という文字列を受け取ります。表現はまだ評価されていません。 XHTML:bean = "#{c}" field = "firstName";コンポーネント:filterBy = "#{bean [field]}" - > loadはEL式を評価する代わりにString = bean [field]で呼び出されます。私もfilterBy = "#{フィールド}"を試して、私のメソッドは "firstName"ではなく "field"という文字列を受け取ります。 –

+0

あなたのアイデアを使って、Jasperは次の答えを得ました:1 - varとフィールド名を分割します。 2 - フィールド変数にフィールド名を挿入します。 XHTML:var = "#{c}" field = "firstName";コンポーネント:フィールド= "#{フィールド}" sortBy = "#{フィールド}" filterBy = "#{フィールド}"。 「フィールド」はここで最も重要な部分です。あなたがそれを使用しない場合、それは動作しません。 –

答えて

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> 
関連する問題