好的,我猜这可能是一个错误,但我不完全确定。有人能看出我哪里做错了吗?
情况是这样的。我有一个复合组件,似乎完美地工作,当它单独在页面上。当组件嵌套在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放在组件外部时,我无法理解为什么事情不能工作。真正奇怪的是,ajax似乎完全正常工作。非常奇怪。
我已经尝试了前缀目标属性:#{cc。这也没有帮助(即使组件的"路径"是正确的)。我做错了什么吗?有人有解决办法吗?
好吧,肯定有什么地方出错了,因为连这个都不起作用:
<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>
我到底错过了什么?
我的页面正在使用视图参数,但它们不是f:view的子参数,所以它们会引起问题。
当我移动它们时,一切都开始正常工作了。我不知道为什么,但当你在f:view:
之外有以下内容时,事情似乎会中断。<f:metadata>
<f:viewParam name="caseId" value="#{caseBackingBean.viewingCaseNumber}" />
</f:metadata>
<f:event type="preRenderView" listener="#{caseBackingBean.loadCase}" />
感谢您的帮助。