xhtml中的示例有效,因为#{row}
中定义了p:dataTable
。如果我在getData
的上下文中调用p:dataTable
,则会返回null
。有关方法返回Values.iterateOverDatatableValues
的情况,请参阅null
。如何定义row
以在我的上下文中使用。可能有数据表的一些函数来迭代值,以便定义#{row}
?
爪哇:
@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>
Java,#{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 :(得分: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);
}