2012-12-04 3 views
8

Мне нужно проверить, прошел ли дополнительный атрибут или нет в моем составном компоненте. Как я могу это достичь?Как проверить наличие необязательного атрибута внутри составного компонента

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

Установка атрибута xxx для <composite:attribute>default не то, что я ищу.

ответ

7

Вы можете просто проверить, подходит ли #{not empty cc.attrs.attr2} для оценки true.

E.g. внутри атрибута любого компонента rendered:

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

кстати он проверяет значение 'attr2' пуст или нет и рендеринга соответственно. – MyFist

+0

Он не работает, как я ожидал. Он проверяет, что VALUE 'attr2' пуст (null) или нет, и рендеринг соответственно. Но я хочу добавить чек (с моей реализацией CC), если 'attr2' сам является PRESENT или нет. Скажем, мой чек на '' должен дать мне true, поскольку передается 'attr2'. И '' должен дать мне «false», поскольку 'attr2' сам не передается. Пожалуйста, предложите. – MyFist

+0

Вы можете сравнить с 'null'. 'rendered =" # {cc.attrs.attr2! = null} "'. – BalusC

3

Вы можете проверить, если выражение существует с помощью метода:

cc.getValueExpression ('') someAttribute

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

Если бы я был им, я бы выбрал этот, как принятый ответ. – webyildirim

0

Вы можете условно добавить атрибуты к компоненту через:

<c:if><f:attribute> 

Пример:

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

Я нашел ответ в:

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