JSF Composite组件<f:ajax>包含未知的id - 无法在组件的上下文中找到它

Anu*_*ngh 8 ajax composite-component jsf-2

我正在尝试使用复合组件事件更新父组件f:ajax.

复合组件在这里:

<cc:interface>
    <cc:attribute name="update" />
    <cc:attribute name="customid" required="true"/>
    <cc:attribute name="val" required="true"/>
    <cc:attribute name="selectedvalue" required="true"/>
</cc:interface>
<cc:implementation>
    <h:panelGrid columns="2" style="font-size: 10px" >
        <p:selectOneMenu id="#{cc.attrs.customid} value="#{cc.attrs.selectedvalue}">
            <f:selectItems value="#{cc.attrs.val}"/>
            <f:ajax event="change" render="#{cc.attrs.update" />
        </p:selectOneMenu>
        <p:commandButton type="button" icon="ui-icon-plus" onclick="dlg.show();" />
    </h:panelGrid>
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)

现在使用此组件时如下:

<h:form>
    <ez:combo customid="make" val="#{vehicleBean.makes}" selectedvalue="#vehicleBean.vehicle.make}" update="model"  />
    <p:selectOneMenu id="model" value="#{vehicleBean.vehicle.model}">
        <f:selectItems value="#{vehicleBean.models}" />
    </p:selectOneMenu>
</h:form>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

包含一个未知的id"模型" - 无法在组件make的上下文中找到它

Mat*_*ndy 15

由于要更新的​​组件不在cc中,因此必须以不同的方式解决它.首先给你的表单一个id:

<h:form id="myform">
Run Code Online (Sandbox Code Playgroud)

然后从cc中解决目标组件,如下所示:

render=":myform:model"
Run Code Online (Sandbox Code Playgroud)

注意尾随冒号,它让JSF从文档根目录中搜索属性.