Это XHTML часть моего составного компонента:JSF Составной компонент отключен атрибут
<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
) он получит правильное отключенное состояние. Запрос его значения в компоненте backing getAttributes().get("disabled")
Я вижу правильное значение. Почему это? Как установить исходный вид компонента?
Я смог исправить это. Я бы не сказал, решение, а не слишком элегантной обходная:
@Override
public void encodeAll(FacesContext context) throws IOException {
Boolean b = (Boolean) getAttributes().get("disabled");
partnerCode.setDisabled(b);
super.encodeAll(context);
}
Я был бы рад, если бы я мог понять, что это проблема с исходным.
Можете ли вы объяснить, почему вы думаете, что это решение? – Kukeltje
для атрибута cc: вам не нужно усложнять жизнь булевым значением; истинный | false string или boolean одинаковы. Для панели p: вы используете p: ajax, поэтому вам нужно обновить компонент jsf, а не html напрямую. – bilelovitch
Усложнять или нет, было бы проблемой ** ** с использованием логического? (и нисходящая нить не от меня кстати). И почему проблема «span» является проблемой? Я не говорю, что вы ошибаетесь, я пытаюсь узнать и получить более подробную информацию для других, чтобы они могли также учиться – Kukeltje