展开某些值的EL-Context
问题描述:
xhtml中的示例工作,因为#{row}
在p:dataTable
中定义。如果我拨打getData
而不是p:dataTable
,它将返回null
。对于这种情况,请参阅Values.iterateOverDatatableValues
,其中方法返回null
。我如何定义row
以在我的上下文中使用。可能有数据可用于迭代值的一些函数,以便定义#{row}
?展开某些值的EL-Context
爪哇:
@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.
}
}
}
答
的解决方案是使用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);
}
_“可能有一些数据表功能遍历值?” _这就是它在橱窗......你到底想达到处事这种奇特的方式 – Kukeltje
我要救在某些外部表中,EL表达式像'#{row.data}'。 – Tony
下一个问题:为什么? – Kukeltje