以编程方式覆盖 composite-component 属性的值表达式
Programmatically override value expression of composite-component’s attribute
我写了一个包装器组件,在某些情况下会覆盖其 children 的某些属性。
在 INVOKE_APPLICATION 阶段(事件之后),它在 child 组件上调用 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);
一切正常 除了 composite-component 为 child。
With composite-component,值表达式在RENDER_RESPONSE阶段重置,初始表达式被评价。
这发生在 CompositeComponentTagHandler$CompositeComponentRule$CompositeExpressionMetadata#applyMetaData
。
有解决办法吗?
我在 jsf-impl Mojarra 2.2.12
中使用 Payara
刚刚调用 UIComponent#setValueExpression
进一步进行 PreRenderViewEvent
处理。
我写了一个包装器组件,在某些情况下会覆盖其 children 的某些属性。
在 INVOKE_APPLICATION 阶段(事件之后),它在 child 组件上调用 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);
一切正常 除了 composite-component 为 child。
With composite-component,值表达式在RENDER_RESPONSE阶段重置,初始表达式被评价。
这发生在 CompositeComponentTagHandler$CompositeComponentRule$CompositeExpressionMetadata#applyMetaData
。
有解决办法吗?
我在 jsf-impl Mojarra 2.2.12
中使用 Payara刚刚调用 UIComponent#setValueExpression
进一步进行 PreRenderViewEvent
处理。