这是情况。我有一个复合组件,当它独自在页面上时似乎完美地工作。当组件嵌套在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时,事情会有问题。我的意思是,你怎么会重新定位你的actionSource等,而不知道你需要的项目的ID(在重复内部,基本上是不可能的)。
但是,当我把ui:重复在组件之外时,我无法解决为什么事情不起作用。真正奇怪的是f:ajax似乎工作得很好。很奇怪。
我尝试使用以下命令为target属性添加前缀:#{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>
我能错过什么?
答案 0 :(得分:0)
我的页面使用了视图参数,但它们不是f:view的子项,因此它们导致了问题。
当我移动它们时,一切都开始正常工作。我不确定为什么但是当你在f之外有类似下面的内容时,事情似乎会破裂:view:
<f:metadata>
<f:viewParam name="caseId" value="#{caseBackingBean.viewingCaseNumber}" />
</f:metadata>
<f:event type="preRenderView" listener="#{caseBackingBean.loadCase}" />
感谢BalusC的帮助。