我编写了一个包装器组件,在某些条件下会覆盖其子组件的某些属性。
在 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
答案 0 :(得分:0)
只是在UIComponent#setValueExpression
处理之后调用PreRenderViewEvent
。