問題:EL式を複合コンポーネントに渡していますが、EL式が以前ではなく複合コンポーネントの内部から評価されています。EL式が文字列に評価されることを意図して、複合コンポーネントに送信されます。
複合コンポーネントがありますMenuTable
:
<cc:interface>
<cc:attribute name="model" type="nz.co.tradeintel.web.MenuTable"/>
<cc.attribute name="updateId" />
</cc:interface>
<cc:implementation>
<h:panelGroup id="menuTable">
<table>
<ui:repeat id="repeat1" value="#{cc.attrs.model.rows}" var="row">
<tr>
<ui:repeat id="repeat2" value="#{row.contents}" var="entry">
<td>
<p:commandLink action="#{cc.attrs.model.setSelected(entry)}" update="#{cc.attrs.updateId}" value="#{entry.toString()}"/>
</td>
</ui:repeat>
</tr>
</ui:repeat>
</table>
</h:panelGroup>
</cc:implementation>
意図は、次のように絶対コンポーネントIDを属性として渡すことですupdateId
。
<p:PanelGroup id="updatingPanel">
<!-- Lots of components.-->
</p:PanelGroup>
<custom:MenuTable updateId="#{component.clientId}:updatingPanel" model="#{menuBackBean.menuTable}" />
問題は、のEL式が複合コンポーネント内のupdateId
スコープから評価され、次のエラーが発生することです。<p:commandLink />
javax.faces.FacesException: Cannot find component with identifier ":j_idt37:j_idt39:updatingPanel:j_idt61:repeat1:0:repeat2:0:j_idt65:updatingPanel" referenced from "j_idt37:j_idt39:updatingPanel:j_idt61:repeat1:0:repeat2:0:j_idt65".
注:JSFは、複合コンポーネント内updatingPanel
にIDが含まれているコンポーネントを更新しようとしていると考えています。
EL式が外部スコープから評価されないのはなぜ<custom:MenuTable/>
ですか?
関連する答えがいくつかありますが、このような答えはわかりません。
Mojarra2.1.15の使用