Primefaces JSF复合组件禁用属性
这是我的复合组件的xhtml部分:Primefaces JSF复合组件禁用属性,primefaces,jsf-2.2,Primefaces,Jsf 2.2,这是我的复合组件的xhtml部分: <cc:interface componentType="partnerSelComp"> <cc:attribute name="value" type="java.lang.Long"/> <cc:attribute name="disabled" type="java.lang.Boolean" default="#{false}"/>
<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>
如果我能理解原版的问题所在,我会很高兴的。试试这个
<cc:attribute name="disabled" type="java.lang.String" default="false"/>
并替换:
<span id="#{cc.clientId}" style="white-space:nowrap">
借
您能解释一下为什么您认为这是解决方案吗?对于cc:attribute,您不需要使用布尔值使生活复杂化;真|假字符串或布尔值是相同的。对于p:panel,您使用的是p:ajax,因此您需要直接更新jsf组件而不是html?(顺便说一句,否决票不是我投的)。为什么给span
一个id是个问题?我并不是说你错了,我是在尝试学习并为其他人获取更详细的信息,这样他们也可以学习当你想禁用inputText时,你可以总是写disabled=“false”或disabled=“#{false}”,但第一个很简单。对于jsf,有一个值得尊重的生命周期。h或p标记被转换为HTML,因此如果您想直接更新HTML,您必须从源代码中检索最终ID。好的,第一部分是关于“美丽”(这总是在旁观者的眼中),但是关于第二部分,您确定:
<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">