【问题标题】:JSF datatable, tomahawk radioJSF 数据表,战斧收音机
【发布时间】:2014-01-31 09:31:35
【问题描述】:

我试图在我的 rich:datatable 中使用 t: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>

请注意,当我删除 t:radio 时,此视图可以工作并呈现和显示来自 backingbean 的数据。

我得到的错误信息是:

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

【问题讨论】:

  • 将 "generateLetterForm:slrDataTable:slrOption" 更改为 "generateLetterForm:slrOption" 并在数据表中为您的 t:radio 指定 id。
  • 这是一个愚蠢的错误。我用过: 但是 slrOption 不在 dataTable 中。删​​除 for 子句中的 slrDatable 可以解决问题。
  • 酷你发现了你的错误:)

标签: jsf jsf-2 datatable radio-button tomahawk


【解决方案1】:

将 for="generateLetterForm:slrDataTable:slrOption" 更改为 for=":generateLetterForm:slrOption" 并在数据表中为您的 t:radio 指定 id。不要忘记 generateLetterForm 之前的“:”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多