2017-01-30 16 views
0

Это 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); 
} 

Я был бы рад, если бы я мог понять, что это проблема с исходным.

ответ

-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"> 
+0

Можете ли вы объяснить, почему вы думаете, что это решение? – Kukeltje

+0

для атрибута cc: вам не нужно усложнять жизнь булевым значением; истинный | false string или boolean одинаковы. Для панели p: вы используете p: ajax, поэтому вам нужно обновить компонент jsf, а не html напрямую. – bilelovitch

+0

Усложнять или нет, было бы проблемой ** ** с использованием логического? (и нисходящая нить не от меня кстати). И почему проблема «span» является проблемой? Я не говорю, что вы ошибаетесь, я пытаюсь узнать и получить более подробную информацию для других, чтобы они могли также учиться – Kukeltje