2014-01-31 60 views
0

我試圖在我的rich:datatable中使用t:radio,但它總是抱怨它無法找到組件。我做了一些谷歌搜索,我必須聲明全名,但我實際上認爲我正在這樣做。JSF datatable,tomahawk radio

任何人都可以指出我做錯了什麼?代碼(我不打算給一個精縮版,因爲我猜它與組成腳麻):

letterDetailTemplate.xhtml:

<h:form id="generateLetterForm"> 
    <ui:include src="addStandardLetterMain.xhtml" /> 
    <ui:include src="addStandardLetterText.xhtml" /> 
    <ui:include src="buttons.xhtml" /> 
</h:form> 

addStandardLetterText.xhtml(單選按鈕結束在這裏,在slrDataTable):

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:fn="http://java.sun.com/jsp/jstl/functions" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:e="http://minfin.regondes2/entity" 
    xmlns:ccffdecorate="http://java.sun.com/jsf/composite/ccffdecorate" 
    xmlns:rich="http://richfaces.org/rich" 
    xmlns:a4j="http://richfaces.org/a4j" 
    xmlns:l="http://minfin.regondes2/layout" 
    xmlns:o="http://omnifaces.org/ui" 
    xmlns:t="http://myfaces.apache.org/tomahawk"> 

    <ui:param name="entityBB" value="#{letterBB}" /> 
    <ui:param name="type" value="Dossier.Letter" /> 

<l:screenzone id="addStandardLetterTextPanel" 
    title="#{AppMessages[type.concat('.addStandardLetterText.title')]}"> 

    <h:outputStylesheet name="letterText.css" library="stylesheets" /> 
    <h:outputScript name="letter.js" library="scripts" /> 

    <a4j:region> 
     <a4j:outputPanel id="letterTextPanel"> 
      <h:inputTextarea id="letterText" name="letterText" 
       value="#{entityBB.entity.text}" styleClass="letterText" /> 
      <script type="text/javascript"> 
        language: '#{screen.locale.language}' 
       CKEDITOR.replace('generateLetterForm:letterTex', { 
       }); 
      </script> 
     </a4j:outputPanel> 

     <h:panelGroup styleClass="rButtonPanelAlignLeft" layout="block" 
      rendered="#{dossierContextBB.dossierContext == 'EDIT'}"> 

      <a4j:commandButton 
       value="#{AppMessages[type.concat('.add.region')]}" 
       actionListener="#{entityBB.findAvailableRegionStandardLetters()}" 
       render="slrPopupFormPanel" limitRender="true" status="ajaxStatus" 
       onclick="LETTER.CKUpdate()" 
       oncomplete="#{rich:component('addStandardLetterRegion')}.show();" /> 
     </h:panelGroup> 

    </a4j:region> 


    <rich:popupPanel id="addStandardLetterRegion" modal="true" 
     onmaskclick="#{rich:component('addStandardLetterRegion')}.hide()" 
     autosized="true"> 
     <f:facet name="header"> 
      <h:outputText 
       value="#{AppMessages['Dossier.Letter.StandardLetter.region.popup.title']}" /> 
             </f:facet> 
     <f:facet name="controls"> 
      <h:outputLink value="#" 
       onclick="#{rich:component('addStandardLetterCentrum')}.hide(); return false;"> 
      X 
     </h:outputLink> 
     </f:facet> 
     <a4j:outputPanel id="slrPopupFormPanel"> 
      <t:selectOneRadio id="slrOption" 
       value="#{standardLetterBB.selected}" layout="spread" 
       converter="#{standardLetterBB.converter}"> 
       <f:selectItems value="#{entityBB.availableStandardLetterText}" 
        var="standardLetter" itemLabel="" itemValue="#{standardLetter}" /> 
      </t:selectOneRadio> 
      <rich:dataTable id="slrDataTable" 
       value="#{entityBB.availableStandardLetterText}" 
       var="standardLetter" noDataLabel="No standard letters found" 
       rowKeyVar="index"> 
       <rich:column headerClass="ListTitle"> 
        <t:radio for="generateLetterForm:slrDataTable:slrOption" index="#{index}" /> 
       </rich:column> 

       <e:column entity="#{standardLetter.dossierType}" type="#{type}" 
        property="type" /> 
       <e:column entity="#{standardLetter}" type="#{type}" 
        property="numbering" /> 
       <e:columnTranslatable entity="#{standardLetter}" type="#{type}" 
        property="text" /> 
      </rich:dataTable> 
     </a4j:outputPanel> 
     <div class="rButtonPanel"> 
      <h:commandButton value="#{AppMessages['general.action.add']}"> 
       <a4j:ajax event="click" execute="generateLetterForm" 
        listener="#{entityBB.addMotivationToReport}" 
        oncomplete="#{rich:component('addStandardLetterRegion')}.hide()" 
        render="reportMotivationTextPanel" limitRender="true" /> 
      </h:commandButton> 
      <a4j:commandButton value="#{AppMessages['general.action.cancel']}" 
       onclick="#{rich:component('addStandardLetterRegion')}.hide()" 
       limitRender="true" immediate="true" bypassUpdates="true" /> 
     </div> 
    </rich:popupPanel> 
</l:screenzone> 

需要注意的是這種觀點的作品和渲染,當我除去叔顯示從backingbean數據,R ADIO。

我得到的errormessage的是:

SEVERE: java.lang.IllegalStateException: Could not find component 'generateLetterForm:slrDataTable:slrOption' (calling findComponent on component 'generateLetterForm:slrDataTable:0:j_idt258') 
javax.faces.FacesException: java.lang.IllegalStateException: Could not find component 'generateLetterForm:slrDataTable:slrOption' (calling findComponent on component 'generateLetterForm:slrDataTable:0:j_idt258') 
+1

將「generateLetterForm:slrDataTable:slrOption」更改爲「generateLetterForm:slrOption」,併爲datatable中的t:radio指定id。 –

+0

這是一個愚蠢的錯誤。我使用了:但ofc slrOption不在dataTable中。刪除for子句中的slrDatable可以解決問題。 – GregD

+0

很酷你發現你的錯誤:) –

回答

2

更改爲= 「generateLetterForm:slrDataTable:slrOption」 爲= 「:generateLetterForm:slrOption」,並指定你的T ID:也DataTable中的無線電。不要忘記generateLetterForm之前的「:」。