扩展 EL-Context 以获得一些值
Expand EL-Context for some value
xhtml 中的示例有效,因为 #{row}
是在 p:dataTable
中定义的。如果我不在 p:dataTable
的上下文中调用 getData
,它会 returns null
。有关方法 returns null
的这种情况,请参阅 Values.iterateOverDatatableValues
。我如何定义 row
以在我的上下文中使用。可能有数据表一些函数来迭代值,以便定义 #{row}
?
Java:
@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.
}
}
}
解决方案是使用 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);
}
xhtml 中的示例有效,因为 #{row}
是在 p:dataTable
中定义的。如果我不在 p:dataTable
的上下文中调用 getData
,它会 returns null
。有关方法 returns null
的这种情况,请参阅 Values.iterateOverDatatableValues
。我如何定义 row
以在我的上下文中使用。可能有数据表一些函数来迭代值,以便定义 #{row}
?
Java:
@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.
}
}
}
解决方案是使用 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);
}