2012-12-04 18 views
8

Devo verificare se un attributo opzionale è stato passato o meno all'interno del mio componente composito. Come posso raggiungere questo obiettivo?Come verificare la presenza di un attributo opzionale all'interno di un componente composito

<composite:interface> 
    <composite:attribute name="attr1" /> 
    <composite:attribute name="attr2" required="false" /> <!-- means OPTIONAL --> 
</composite:interface> 
<composite:implementation> 
    <!-- How I can verify here whether attr2 is present or not whenever this component is used? --> 
</composite:implementation> 

impostazione dell'attributo default-xxx per <composite:attribute> non è quello che sto cercando.

risposta

7

Si può semplicemente verificare se #{not empty cc.attrs.attr2} valuta a true.

E.g. all'interno dell'attributo rendered di un componente arbitraria:

<composite:implementation> 
    <h:panelGroup rendered="#{not empty cc.attrs.attr2}"> 
     Attribute attr2 is not empty! 
    </h:panelGroup> 
</composite:implementation> 
+0

dal modo in cui sta controllando il valore di 'attr2' è vuota o non e rendendo di conseguenza. – MyFist

+0

Non funziona come mi aspettavo. Sta controllando il valore di 'attr2' è vuoto (nullo) o meno e rende di conseguenza. Ma voglio aggiungere un controllo (con la mia implementazione CC) se 'attr2' stesso è PRESENTE o no. Diciamo che il mio controllo su '' dovrebbe darmi 'true' come viene passato' attr2' stesso. AND '' dovrebbe darmi 'false' poiché' attr2' stesso non viene passato. Si prega di suggerire. – MyFist

+0

Si può confrontare con 'null'. 'rendered =" # {cc.attrs.attr2! = null} "'. – BalusC

3

È possibile controllare per vedere se l'espressione esiste utilizzando il metodo:

cc.getValueExpression ('someAttribute')

<composite:implementation> 
    <h:outputText rendered="#{cc.getValueExpression('attr2') ne null}"> 
     Attribute attr2 has been passed! 
    </h:outputText> 
</composite:implementation> 
+0

Se fossi in lui, sceglierei questa come risposta accettata. – webyildirim

0

È possibile aggiungere attributi al componente tramite:

<c:if><f:attribute> 

Esempio:

<composite:interface> 
    <composite:attribute name="label" /> 
    <composite:attribute name="required" default="false" /> 
    <composite:attribute name="readonly" default="false" /> 
    <composite:attribute name="value" /> 
    <composite:attribute name="title" /> 
    <composite:attribute name="placeholder" /> 
    <composite:attribute name="maxlength" type="java.lang.Integer"/> 
</composite:interface> 
<composite:implementation> 
    <p:inputText 
     id="field" 
     value="#{cc.attrs.value}"> 
     <c:if test="#{empty cc.attrs.maxLength}"> 
      <f:attribute name="maxlength" value="#{cc.attrs.maxlength}" /> 
     </c:if> 
    </p:inputText> 
</composite:implementation> 

ho trovato la risposta in:

How not to set an attribute of a component inside a composite component if it is empty?