下面的Java代码允许访问来自faces上下文任何对象或变量的表达值:编程得到小面参数(变量)
ELContext elCtx = facesContext.getELContext();
ExpressionFactory exprFac = facesContext.getApplication().getExpressionFactory();
MyProperty myProperty = (MyProperty) exprFac.createValueExpression(elCtx, "#{somebean.someattr.someproperty}", MyProperty.class).getValue(elCtx);
我使用的代码从我的自定义转换器内读取来自上下文附加转换参数。
如果在JSF上下文中将#{somebean}
定义为正常的支持bean,代码将正常工作。
Facelets允许为JSF表达式创建“快捷方式”。例如:
<ui:param name="shortcut" value="#{somebean.someattr.someproperty}" />
<div>#{somebean.someattr.someproperty} equals #{shortcut}</div>
在这种情况下,两个#{somebean.someattr.someproperty}
和#{shortcut}
具有相同的值。
但是,这些'快捷方式'名称不能通过上面的java代码访问。例如:
MyProperty myProperty1 = (MyProperty) exprFac.createValueExpression(elCtx, "#{somebean.someattr.someproperty}", MyProperty.class).getValue(elCtx);
// myProperty1 has expected value
MyProperty myProperty2 = (MyProperty) exprFac.createValueExpression(elCtx, "#{shortcut}", MyProperty.class).getValue(elCtx);
// myProperty2 is null
有没有办法访问facelets上下文并读取在当前JSF页面上定义的'shortcut'参数值?
谢谢!不幸的是,它似乎只适用于JSF 2.0。方法`getAttributes()`目前在我的项目中不可用。我们必须升级到最新的JSF版本。 [另请参阅Javadoc](http://docs.oracle.com/javaee/6/api/javax/faces/context/FacesContext.html#getAttributes()) – DRCB 2012-02-15 10:24:21