获取bean类我有复合材料部件:从复合材料部件
<my:component value="#{bean.property1.property2}/>
从复合材料部件,我需要得到类bean.property1
读取其注解。 我做到这一点通过下面的代码:
ValueExpression valueExpression = expressionFactory.createValueExpression(FacesContext.getCurrentInstance().getELContext(),
"#{bean.property1}", Object.class);
Object bean = valueExpression.getValue(FacesContext.getCurrentInstance().getELContext());
Class<?> beanClass = bean.getClass();
这种运作良好,但如果我通过ui:param
使用my:component
从facelet里,并通过bean
作为参数,这并不工作,因为bean
不能得到解决。
也许我应该使用FaceletContext
作为ELContext
而不是FacesContext.getCurrentInstance().getELContext()
:
FaceletContext faceletElContext = (FaceletContext) FacesContext.getCurrentInstance().getAttributes()
.get("javax.faces.FACELET_CONTEXT");
但这并不对RENDER_RESPONSE
阶段工作(从encodeBegin
法)。它返回最后使用的ELContext而不是实际的上下文(我并不感到惊讶:))。
目标是从my:component
获得#{bean.property1}
的等级。我该怎么做?
JSF自己的'ValueExpressionAnalayzer'是一个包私有类,因此不幸公开可用。为此,OmniFaces还有一个'org.omnifaces.el.ExpressionInspector'。它甚至支持从EL表达式中提取方法参数(在a.o.''中使用)。 –
BalusC
@BalusC你是对包私人。我编辑了我的答案。我应该看看OmniFaces。它与RichFaces相处吗? –
几个OmniFaces工件已经用RF 4.5进行测试。至少,它应该像PrimeFaces一样并排运行。 OmniFaces满足于与任何JSF组件库兼容。如果您发现与最新RF版本有任何兼容性问题,请通过任何方式报告[问题](https://github.com/omnifaces/omnifaces/issues)。 – BalusC