1

好的,我猜这可能是一个错误,但我不完全确定。谁能看到我做错了什么?

这是情况。我有一个复合组件,当它单独在页面上时,它似乎可以完美地工作。当组件嵌套在 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>

我到底能错过什么?

4

1 回答 1

0

我的页面正在使用视图参数,但它们不是 f:view 的子级,因此它们会导致问题。

当我移动它们时,一切都开始正常工作。我不确定为什么,但是当您在 f:view 之外有以下内容时,事情似乎会中断:

<f:metadata>
    <f:viewParam name="caseId" value="#{caseBackingBean.viewingCaseNumber}" />

</f:metadata>
<f:event type="preRenderView" listener="#{caseBackingBean.loadCase}" />

感谢 BalusC 的帮助。

于 2011-10-17T19:28:26.983 回答