这是我的复合组件的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);
}
如果我能理解原始问题是什么,我会很高兴。
答案 0 :(得分:-1)
试试这个,
<cc:attribute name="disabled" type="java.lang.String" default="false"/>
并替换:
<span id="#{cc.clientId}" style="white-space:nowrap">
通过
<p:panel id="#{cc.clientId}" style="white-space:nowrap">