这里有一个主要的误解。那不是支持豆。这是一个支持组件。
JSF
UI组件实例不在视图范围内,而是在请求范围内。它们会在渲染响应结束时销毁(将其状态保存到JSF视图状态之后),并在视图构建期间进行重新创建(并且它们的状态将从JSF视图状态恢复)。
您已将有状态属性分配为组件的实例变量。这是不对的。您应该将它们显式存储在JSF状态。正确的方法是让getter和setter委托给
UIComponent#getStateHelper()。声明为
<cc:attribute>已隐式执行的任何属性都可以这样做。您绝对不需要将它们重新声明为支持组件的实例变量。
那些未声明为的布尔值
<cc:attribute>必须重新实现,如下所示:
public Boolean getRenderUserId() { return (Boolean) getStateHelper().eval("renderUserId", Boolean.FALSE);}public void setRenderUserId(Boolean renderUserId) { getStateHelper().put("renderUserId", renderUserId);}在您的action(listener)方法中,只需进行相应的调用即可
setRenderUserId(true)。
不要忘记相应地修复EL表达式:
#{cc.renderUserId}


