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