2017-10-10 8 views
0

#{row}p:dataTableで定義されているため、xhtmlの例が機能します。文脈がp:dataTableでないgetDataを呼び出すと、nullが返されます。メソッドがnullを返すこの状況については、Values.iterateOverDatatableValuesを参照してください。私の文脈ではrowをどのように定義すればよいですか?場合によっては、数値を反復処理して#{row}を定義する関数をいくつか用意していますか?一部の値のELコンテキストを展開します

ジャワ:

@Named 
@SessionScoped 
class Test { 
    public Object getData() { 
    return Faces.evaluateExpressionGet("#{row.someProperty}"); //The String "#{row.someProperty}" comes from a collection. 
    } 
} 

XHTML #{row}Test.getData()で定義されている:

<p:dataTable value="#{bean.values}" var="row"> 

    <p:column> 
     <h:outputText value="#{test.data}" /> 
    </p:column> 
</p:dataTable> 

ジャワ、#{row}が未定義である:。

class Values { 
    @Inject 
    Test test; 

    public void iterateOverDatatableValues(){ 
    DataTable dt = Components.findComponent("datatableId"); 
    for (Object o : dt.getValues()){ 
     test.getData(); // <---- NULL because #{row} is not defined. 
    } 
    } 
} 
+0

_「は、おそらく値を反復するデータテーブルいくつかの機能を持っている?」_それはそれはあなたが私が保存したいエキゾチックな方法 – Kukeltje

+0

この種の中で物事を達成しようとしている...ショーケースに何をするかですいくつかの外部表の '#{row.data} 'のようなEL式。 – Tony

+0

次の質問:なぜですか? – Kukeltje

答えて

0

溶液がexpressionFactory()を使用することであったcreateValueExperssion方法。

private void setRowEL(Object o) { 
    ELContext elContext = Faces.getELContext(); 
    ExpressionFactory expressionFactory = Faces.getApplication().getExpressionFactory(); 
    ValueExpression aliasValueExpression = expressionFactory.createValueExpression(elContext, "#{row}", MyValue.class); 
    aliasValueExpression.setValue(elContext, o); 
} 
関連する問題