2012-03-06 23 views
6

Tôi đang gặp sự cố "Thuộc tính id trống không được cho phép trong JSF" trong khi sử dụng thành phần tổng hợp được đề cập dưới đây cho một nhóm nút (số nút có thể từ 1 đến 3) (Tôi sử dụng Mojarra 2-0-8 trên Tomcat-7).Thuộc tính id trống không được phép trong thành phần JSF Composite

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:composite="http://java.sun.com/jsf/composite"> 


    <composite:interface>  
     <composite:attribute name="buttonCount" /> 
     <composite:attribute name="button1Id" /> 
     <composite:attribute name="button1Style" /> 
     <composite:attribute name="button1Action" /> 
     <composite:attribute name="button2Id" /> 
     <composite:attribute name="button2Style" /> 
     <composite:attribute name="button2Action" /> 
     <composite:attribute name="button3Id" /> 
     <composite:attribute name="button3Style" /> 
     <composite:attribute name="button3Action" /> 

    </composite:interface> 
    <composite:implementation>  
     <h:commandButton rendered = "#{cc.attrs.buttonCount ge '1'}" id="#{cc.attrs.button1Id}" styleClass="#{cc.attrs.button1Style}"> 
      <f:ajax listener="#{cc.attrs.button1Action}" immediate="true"/>          
     </h:commandButton> 
     <h:panelGroup rendered = "#{cc.attrs.buttonCount ge '2'}"> 
      <h:commandButton id="#{cc.attrs.button2Id}" styleClass="#{cc.attrs.button2Style}"> 
       <f:ajax listener="#{cc.attrs.button2Action}" immediate="true"/>          
      </h:commandButton> 
     </h:panelGroup> 
     <h:panelGroup rendered = "#{cc.attrs.buttonCount eq '3'}"> 
      <h:commandButton id="#{cc.attrs.button3Id}" styleClass="#{cc.attrs.button3Style}"> 
       <f:ajax listener="#{cc.attrs.button3Action}" immediate="true"/>          
      </h:commandButton> 
     </h:panelGroup> 
    </composite:implementation> 
</html> 

Sử dụng CC ở trên.

<Buttons:myButton txtHeader="Title" txtDescription="text1" 
        txtAction="TextAction." button1Style="btnSave" buttonCount ="1" button1Id="btnSaveConf" button1Action="#{MyBean.save()}"></Buttons:myButton> 

có cách nào tốt hơn để tự động tạo các nút dựa trên số lượng hoặc bất kỳ hình thức đầu vào nào của simillar trên trang chính hay không. lưu ý: - id, kiểu và hành động sẽ khác nhau về tên.

Trả lời

5

Bạn không thể sử dụng thời gian hiển thị EL trong thuộc tính id. Cung cấp cho nó một ID cố định thay thế và cung cấp cho bản thân hỗn hợp cũng là một ID. Vì vậy, ví dụ:

<buttons:myButton id="foo" ... /> 

với trong việc thực hiện

<h:commandButton id="button1" ... /> 
<h:commandButton id="button2" ... /> 
<h:commandButton id="button3" ... /> 

Họ sau đó sẽ trở thành foo:button1, foo:button2foo:button3 nơi phần foo là như vậy, kiểm soát trong các mẫu khách hàng.

Nếu bạn thực sự cần ID động cho một số lý do không rõ ràng, thì bạn nên tạo tệp thẻ chứ không phải thành phần hỗn hợp.

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