JSF SelectManyCheckbox ajax渲染id

时间:2015-02-05 10:38:42

标签: jsf

我有

<h:panelGroup>
     <ui:repeat value="#{requests.filters}" var="filter">
          <custom:filter filter="#{filter}" update="j_requests"/>
     </ui:repeat>
     <h:panelGroup id="j_requests">
     <h:outputText value="Запросы журналистов:"/>
     <custom:requestList id="allrequests" data="#{requests.getRequests()}"/>
</h:panelGroup>

它在localhost计算机上运行正常,但在其他计算机上加载页面时失败,例外情况为:avax.faces.FacesException: <f:ajax> contains an unknown id 'j_requests' - cannot locate it in the context of the component j_idt20_filters 似乎j_requests在ui:repeat中不可见?但它如何在开发机器上工作? 这里是过滤器复合组件:

<cc:interface>
    <cc:attribute name="update"/>
    <cc:attribute name="filter" type="ru.rs.corhub.web.filters.RegionBoxFilter"/>
</cc:interface>
<cc:implementation>
    <h:form>
        <h:outputText value="#{cc.attrs.filter.name}:"/>
        <h:selectManyCheckbox id="#{cc.attrs.id}_filters" value="#{cc.attrs.filter.selectedCriterias}" converter="regionConverter">
            <f:selectItems value="#{cc.attrs.filter.criterias}" var="item" itemLabel="#{item.value()}" itemValue="#{item}"/>
            <f:ajax render="#{cc.attrs.update}" listener="#{requests.populateFilteredList()}"/>
        </h:selectManyCheckbox>
    </h:form>
</cc:implementation>

1 个答案:

答案 0 :(得分:0)

由于你的自定义组件中有一个h:form - 它是一个NamingContainer - 所有内部元素的id都以该表单的id为前缀。因此,当您将相对ID放入update - 属性时,将找不到该组件,因为该表单中没有标识为j_requests的组件。要解决这个问题,您可以使用:作为前缀来使用绝对ID,即update=":j_requests"