【发布时间】:2017-01-30 20:02:09
【问题描述】:
这是我的复合组件的 xhtml 部分:
<cc:interface componentType="partnerSelComp">
<cc:attribute name="value" type="java.lang.Long"/>
<cc:attribute name="disabled" type="java.lang.Boolean" default="#{false}"/>
<cc:attribute name="service"/>
</cc:interface>
<cc:implementation>
<span id="#{cc.clientId}" style="white-space:nowrap">
<p:inputText id="id" type="hidden" binding="#{cc.partnerId}"/>
<p:inputText id="code"
binding="#{cc.partnerCode}"
disabled="#{cc.attrs.disabled}" >
<p:ajax event="blur" update="code name msg" listener="#{cc.validate}" />
</p:inputText>
<p:inputText id ="name"
disabled="true"
binding="#{cc.partnerName}" />
<p:message id="msg" for="code"/>
</span>
</cc:implementation>
我这样称呼它:
<my:PartnerSelComp id="partnerSel" value="#{myBean.partner}" service="#{partnerService}" disabled="true"/>
当组件最初呈现时,code 组件出现可编辑事件,尽管指定了 disabled="true"。但是在第一个 ajax 模糊事件之后(我猜是因为 update),它将获得正确的禁用状态。在支持组件getAttributes().get("disabled") 中查询它的值我可以看到正确的值。为什么?如何设置组件的初始外观?
我能够修复它。我不会说一个解决方案,而是一个不太优雅的解决方法:
@Override
public void encodeAll(FacesContext context) throws IOException {
Boolean b = (Boolean) getAttributes().get("disabled");
partnerCode.setDisabled(b);
super.encodeAll(context);
}
如果我能理解原始版本有什么问题,我会很高兴。
【问题讨论】:
标签: primefaces jsf-2.2