2012-07-27 99 views
1

我有這個代碼工作,雖然我期望它失敗。要獲得焦點的組件是<p:inputText>,所以我期望其名稱爲custForm:panelGrid:name-id(以反映<p:inputText>組件在<p:panelGrid>組件中的嵌入)。然而,唯一有效的命名是custForm:name-id。看來有一些PrimeFaces組件不會在合格的名稱中「插入」它們的id。如果是這樣,那麼記錄在哪裏?PrimeFaces中JSF組件的命名

<h:form id="custForm" styleClass="jsfcrud_list_form"> 
<script type="text/javascript"> 
    function primeFacesId() 
    { 
     var original = 'custForm:name-id'; 
     var idToSetFocus = PrimeFaces.escapeClientId(original); 
     $(idToSetFocus).focus(); 
    } 
</script> 
<script> 
    jQuery(document).ready(function() { 
     primeFacesId(); 
    }); 
</script> 
<p:panelGrid columns="10" style="width: 98%;margin-left: 1%;margin-right: 1%;" id="panelGrid"> 
    <h:outputLabel for="name" value="Name:" /> 
    <p:inputText id="name-id" value="#{customerLController.nameDBConstraint}" label="name" /> 
     (...) 

[我背後的企業防火牆和因「因此需要從另一個域外部JavaScript」我不能接受任何答案几天的]

回答

1

對於純JSF所有實現了接口的組件都將它們的id作爲前綴添加到容器中的所有組件。這例如是h:formh:dataTable但不是h:panelGrid。您可以瀏覽API documentation for Mojarra以獲取有關的詳細信息。

由於許多Primefaces組件都是從標準JSF組件派生而來的,我認爲它們的行爲是類似的。

UPDATE: 我發現這個Primefaces文檔中爲版本3.2:

JSF H:形式,數據表,複合部件被命名容器, 此外TabView的,accordionPanel,dataTable中,DataGrid後,數據列表, 傳送帶,環球免稅店,環形,表單和子表是PrimeFaces組件 ,它們實現了NamingContainer。

至少對於p:panelGrid這是不正確的(並且可以在PF showcase for the panelgrid的html源中進行驗證)。