2012-12-04 8 views
8

Muszę sprawdzić, czy opcjonalny atrybut został przekazany, czy nie w ramach mojego składnika złożonego. Jak mogę to osiągnąć?Jak sprawdzić obecność opcjonalnego atrybutu wewnątrz komponentu złożonego?

<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> 

Ustawienie atrybutu xxx dla <composite:attribute>default nie jest to, czego szukam.

Odpowiedz

7

Można po prostu sprawdzić, czy #{not empty cc.attrs.attr2} ocenia na true.

E.g. wewnątrz atrybutu dowolnego komponentu rendered:

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

nawiasem mówiąc to sprawdza wartość 'attr2' jest pusta lub nie i odpowiednio renderowania. – MyFist

+0

To nie działa tak jak się spodziewałem. Sprawdza, czy wartość VALUE 'attr2' jest pusta (null) lub czy nie jest odpowiednio wyświetlana. Ale chcę dodać czek (w mojej implementacji CC), jeśli 'attr2' sam jest OBECNY, czy nie. Powiedzmy, że sprawdzam '" powinno dać mi 'true' jako, że' attr2' jest przekazywane. AND ' powinno dać mi' false', ponieważ 'attr2' samo nie jest przekazywane. Proszę zasugeruj. – MyFist

+0

Można porównać do 'null'. 'renderowany =" # {cc.attrs.attr2! = null} "'. – BalusC

3

Można sprawdzić, czy istnieje wyrażenie stosując metodę:

cc.getValueExpression ('') someAttribute

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

Gdybym był nim, wybrałbym tę jako zaakceptowaną odpowiedź. – webyildirim

0

Możesz warunkowo dodać atrybuty do komponentu przez:

<c:if><f:attribute> 

Próbka:

<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> 

znalazłem odpowiedź w:

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

Powiązane problemy