这与自定义类型无关。这与使用文字(静态)值和EL以及
attributename="attributevalue"ins有关
attributename="#{attribute.value}"。此行为是预期的,并且根据规范。EL表达式的属性值
Valueexpression由设置
UIComponent#setValueexpression()。也就是说,应该仅在
真正 需要它们时才对它们进行评估,通常是在视图渲染期间。不应在烘烤实例期间 直接
对它们进行评估,
UIComponent因为那样会破坏动态值表达式的性质(请考虑取决于数据表的当前迭代周期)。
更好的方法是委派可以保存EL值表达式的属性的getter / setter
UIComponent#getStateHelper()而不是局部属性。该
setValueexpression()在将最终就是也结束了
StateHelper。该
UIComponent#getAttributes()还从解析值
StateHelper。
public Image getImage() { return (Image) getStateHelper().eval("image");}public void setImage(Image image) { getStateHelper().put("image", image);}请注意,没有本地属性。因此,当您需要属性的(求值)值时,只需调用getter。
为了实现您的初始功能需求(即set属性的日志记录),您可能希望将logging语句添加到
setValueexpression()委托给的重写中
super。
@Overridepublic void setValueexpression(String name, Valueexpression binding) { log.debug(....); super.setValueexpression(name, binding);}


