2012-12-04 28 views
8

Tôi cần xác minh xem thuộc tính tùy chọn đã được chuyển hay không trong thành phần tổng hợp của tôi. Làm thế nào tôi có thể đạt được điều này?Cách kiểm tra sự hiện diện của thuộc tính tùy chọn bên trong thành phần hỗn hợp

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

Thiết lập default thuộc tính để xxx cho <composite:attribute> không phải là những gì tôi đang tìm kiếm.

Trả lời

7

Bạn chỉ có thể kiểm tra xem #{not empty cc.attrs.attr2} đánh giá là true hay không.

Ví dụ: bên trong rendered thuộc tính của một thành phần tùy ý:

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

bởi cách thức mà nó được kiểm tra giá trị của 'attr2' trống hay không và render cho phù hợp. – MyFist

+0

Nó không hoạt động như tôi mong đợi. Việc kiểm tra giá trị VALUE của 'attr2' là rỗng (null) hay không và hiển thị tương ứng. Nhưng tôi muốn thêm một kiểm tra (có trong thực hiện CC của tôi) nếu 'attr2' chính nó là HIỆN TẠI hay không. Nói rằng kiểm tra của tôi trên '' nên cho tôi 'true' khi' attr2' được truyền. VÀ '' nên cho tôi 'false' vì chính nó' attr2' không được thông qua. Xin đề nghị. – MyFist

+0

Bạn có thể so sánh với 'null'. 'rendered =" # {cc.attrs.attr2! = null} "'. – BalusC

3

Bạn có thể kiểm tra xem biểu thức tồn tại sử dụng phương pháp này:

cc.getValueExpression ('someAttribute')

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

Nếu tôi là anh ấy, tôi sẽ chọn câu trả lời này là câu trả lời được chấp nhận. – webyildirim

0

Bạn có thể thêm thuộc tính vào thành phần theo cách có điều kiện qua:

<c:if><f:attribute> 

mẫu:

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

Tôi tìm thấy câu trả lời trong:

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

Các vấn đề liên quan