好的,我猜这可能是一个错误,但我不完全确定。谁能看到我做错了什么?
这是情况。我有一个复合组件,当它单独在页面上时,它似乎可以完美地工作。当组件嵌套在 ui:repeat 中时,问题就出现了。这是我调用组件的两个地方(仅用于测试):
<q:case aCase="#{userSummaryBackingBean.userCases.get(0)}">
<f:setPropertyActionListener for="clickEvent" target="#{userSummaryBackingBean.value}" value="single"/>
<f:ajax execute="@this" render="@this :westPaneForm"/>
</q:case>
<ui:repeat value="#{userSummaryBackingBean.userCases}" var="aCase">
<li>
<q:case aCase="#{aCase}">
<f:setPropertyActionListener for="clickEvent" target="#{userSummaryBackingBean.value}" value="repeat"/>
<f:ajax execute="@this" render="@this :westPaneForm"/>
</q:case>
</li>
</ui:repeat>
组件定义如下:
<cc:interface>
<cc:attribute name="aCase" type="com.autonomy.calltrack.data.dto.Case"/>
<cc:actionSource name="clickEvent" targets="caseCommandLink"/>
<cc:attribute name="action" targets="caseCommandLink" />
<cc:attribute name="actionSource" targets="caseCommandLink" />
<cc:clientBehavior name="click" event="action" targets="caseCommandLink" default="true"/>
</cc:interface>
<cc:implementation>
<h:commandLink id="caseCommandLink" styleClass="case ui-state-default" title="#{cc.clientId}">
--- more code ---
</h:commandLink>
</cc:implementation>
如您所见,调用完全相同,但单个项目有效,而 ui:repeat 中的项目则无效。现在,对我来说,当组件本身具有 ui:repeat 时会出现问题,这是有道理的。我的意思是,在不知道您需要的项目 ID 的情况下,您将如何重新定位您的 actionSource 等(在重复中,这基本上是不可能的)。
但是,当我将 ui:repeat 放在组件之外时,我无法理解为什么事情不起作用。真正奇怪的是 f:ajax 似乎工作得很好。很奇怪。
我尝试使用 :#{cc.clientId} 为目标属性添加前缀,但这也无济于事(即使组件的“路径”是正确的)。难道我做错了什么?有没有人有办法解决吗?
好吧,一定有问题,因为即使这样也行不通:
<ui:repeat value="#{userSummaryBackingBean.userCases}" var="aCase">
<h:commandLink id="caseCommandLink" value="test" styleClass="case ui-state-default">
<f:setPropertyActionListener target="#{userSummaryBackingBean.value}" value="REPEAT"/>
<f:ajax execute="@this" render="@this :westPaneForm"/>
</h:commandLink>
</ui:repeat>
我到底能错过什么?