以编程方式覆盖复合组件的属性

时间:2018-03-16 11:16:54

标签: java jsf-2 jsf-2.2 composite-component mojarra

我编写了一个包装器组件,在某些条件下会覆盖其子组件的某些属性。

INVOKE_APPLICATION 阶段(事件发生后),它会在子组件上调用UIComponent#setValueExpression

FacesContext ctx = FacesContext.getCurrentInstance();
ELContext eLContext = ctx.getELContext();
ExpressionFactory factory = ctx.getApplication().getExpressionFactory();
String newModelExpression = "#{newExpression}";
ValueExpression exp = factory.createValueExpression(eLContext, newModelExpression, Object.class);
((UIComponent) child).setValueExpression("model", exp);  

一切都很好除了复合组件 t作为子项。

使用复合组件,将在 RENDER_RESPONSE 阶段重置值表达式,并计算初始表达式。

这发生在CompositeComponentTagHandler$CompositeComponentRule$CompositeExpressionMetadata#applyMetaData

有解决方法吗?

我正在使用Payara和jsf-impl Mojarra 2.2.12

1 个答案:

答案 0 :(得分:0)

只是在UIComponent#setValueExpression处理之后调用PreRenderViewEvent