Beispiel in xhtml funktioniert, weil #{row}
in p:dataTable
definiert ist. Wenn ich getData
nicht im Kontext von p:dataTable
rufe, gibt es null
zurück. Siehe Values.iterateOverDatatableValues
für diese Situation, in der die Methode null
zurückgibt. Wie kann ich row
definieren, um in meinem Kontext zu verwenden. Möglicherweise hat Datatable einige Funktionen, um über Werte zu iterieren, so dass #{row}
definiert wird?Erweitern Sie EL-Kontext für einen Wert
Java:
@Named
@SessionScoped
class Test {
public Object getData() {
return Faces.evaluateExpressionGet("#{row.someProperty}"); //The String "#{row.someProperty}" comes from a collection.
}
}
XHTML #{row}
in Test.getData()
definiert ist:
<p:dataTable value="#{bean.values}" var="row">
<p:column>
<h:outputText value="#{test.data}" />
</p:column>
</p:dataTable>
Java ist #{row}
undefined:
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.
}
}
}
_ „hat möglicherweise Datentabelle einige Funktionen über Werte zu wiederholen?“ _ Das ist, was es tut, in der Vitrine ... Was versuchen Sie – Kukeltje
Ich will Dinge zu tun, in dieser Art von exotischer Art und Weise zu erreichen, speichern EL-Ausdrücke wie '# {row.data}' in einer externen Tabelle. – Tony
Nächste Frage: Warum? – Kukeltje