2012-03-21 18 views
2

我定義了一個複合材料部件(實際數),當我嘗試重新呈現插入組件我的錯誤中提到:錯誤:<f:ajax>包含未知的ID複合使用時:insertChildren

<f:ajax> contains an unknown id ':contentFrm' - cannot locate it in the context of the component j_idt40 

如果我只需更換:

<et:pageContent formId="contentFrm"> 

<h:form id="contentFrm"> 
<div> 
使用相同的組件

<!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:h="http://java.sun.com/jsf/html" 
     xmlns:composite="http://java.sun.com/jsf/composite"> 

    <composite:interface> 
     <composite:attribute name="styleClass" default="access-box-content alpha omega grid-12" /> 
     <composite:attribute name="formId" default="#{cc.attrs.id}" /> 
    </composite:interface> 
    <composite:implementation> 
     <h:form id="#{cc.attrs.formId}"> 
      <div class="#{cc.attrs.styleClass}"> 
       <composite:insertChildren/> 
      </div> 
     </h:form> 
    </composite:implementation> 
</html> 

這是我如何使用複合

<?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"> 
<ui:composition id="landing" 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:et="http://java.sun.com/jsf/composite/components" 
       template="/layout/template.xhtml" 
       xmlns:c="http://java.sun.com/jsp/jstl/core"> 

    <ui:define name="main-content"> 
     <et:pageTitle title="#{msg.trx_lastTrx}" /> 
     <et:tabBar formId="currentTrxFrm">  
      <et:tab bean="#{accountTransactionBacking}" 
        prompt="#{msg.trx_currentTrxs}" 
        reRender=":contentFrm" 
        tabId="1" 
        active="true"/> 
     </et:tabBar> 
     <et:pageContent formId="contentFrm"> 
       <et:tabContentPanel rendered="#{accountTransactionBacking.selectedTab ==1}"> 
        <ui:include src="/app/summary/currentTrxRG.xhtml" rendered="#{accountTransactionBacking.selectedTab ==1}"/> 
       </et:tabContentPanel> 
     </et:pageContent> 
    </ui:define> 
</ui:composition> 

TIA

一些測試..:

然後一切工作正常

下面是相關代碼得到相同的結果..例如下面的代碼給出了類似的錯誤(甚至用render =「accountSummaryLines」替換render =「accountSummaryLines」)。 。

<?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"> 
<ui:composition id="landing" 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:et="http://java.sun.com/jsf/composite/components" 
       template="/layout/template.xhtml" 
       xmlns:c="http://java.sun.com/jsp/jstl/core"> 

    <ui:define name="main-content"> 
     <et:pageTitle title="#{msg.ls_lastStatement}" /> 

     <et:tabBar formId="acctSummTabFrm"> 
      <et:tab/> 
     </et:tabBar> 

      <et:pageContent formId="accountButtonsFrm"> 

       .... 

       <et:div styleClass="accountSummaryLines" divId="lastStatementLines"> 
        <ui:repeat var="row" value="#{lastStatementBacking.lines.data}"> 
         <h:outputText escape="false" value="#{row}" styleClass="grid-12 lastStatementDetail"/><br></br> 
        </ui:repeat> 
       </et:div> 
       <et:div styleClass="access-box-footer"> 
        <h:commandButton styleClass="left" action="#{lastStatementBacking.lines.prevPage}" value="#{msg.buttonPrevPage}" style="float:left;"> 
         <f:ajax render="accountSummaryLines" /> 
        </h:commandButton> 
        <h:commandButton styleClass="right" action="#{lastStatementBacking.lines.nextPage}" value="#{msg.buttonNextPage}"> 
         <f:ajax render="accountSummaryLines" /> 
        </h:commandButton> 
       </et:div> 
      </et:pageContent> 
    </ui:define> 
</ui:composition> 

我得到這個特別的例子是使用渲染=「@形式」的工作,像這樣的唯一途徑..

回答

3

它不能被發現,因爲複合材料部件是由自己一個NamingContainerreal有效的客戶端ID將爲:idOfComposite:contentFrm,其中idOfComposite是複合組件本身的(自動)生成的ID。如果您在網絡瀏覽器中執行查看源代碼,並找到<form>問題,那麼您會看到它。

你需要給複合部件的固定ID

<et:pageContent id="contentFrm"> 

和一個普通的HTML元素它包裝複合材料的內容,例如在使用的正是這種ID <div><span>

<composite:implementation> 
    <div id="#{cc.id}"> 
     <h:form> 
      <div class="#{cc.attrs.styleClass}"> 
       <composite:insertChildren/> 
      </div> 
     </h:form> 
    </div> 
</composite:implementation> 
+0

Thanks @BalusC!這解決了我的問題..我實際上離開了'

'',因爲我需要這個例子。唯一的是我必須使用這個' ... 。 .. '有沒有更短的路:..-(我知道,我知道... @表單) – FMQ 2012-03-22 03:12:35

相關問題