开发者

Composite component inside a ui:repeat, causes actionSource to not fire

开发者 https://www.devze.com 2023-04-13 09:14 出处:网络
OK, I\'m guessing that this might be a bug but I\'m not totally sure.Can anyone see what I\'m doing wrong?

OK, I'm guessing that this might be a bug but I'm not totally sure. Can anyone see what I'm doing wrong?

Here's the situation. I have a composite component that seems to work perfectly when it's alone on the page. The problem comes when the component is nested inside of a ui:repeat. Here are the two places I am calling the component (just for a test):

<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>

and the component is defined as follows:

<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>

As you can see, the calls are exactly the same but the single item works and the items in the ui:repeat do not. Now, it makes sense to me that things w开发者_运维技巧ill be problematic when the component itself has a ui:repeat. I mean, how would you retarget your actionSource, etc without knowing the ID of the items you need (which, inside of the repeat, is basically impossible).

HOWEVER, when I put the ui:repeat outside of the component I can't wrap my head around why things wouldn't work. The REALLY odd thing is that the f:ajax seems to work totally fine. VERY odd.

I've tried prefixing the targets attributes with :#{cc.clientId} and that doesn't help either (even though the "path" to the components is correct). Am I doing something wrong? Does anyone have a solution?

Alright, something must be wrong because even this doesn't work:

<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>

What the heck could I be missing?


My page was using view params but they weren't a child of f:view so they were causing problems.

When I moved them everything started to work normally. I'm not sure why but it seems that things break when you have something like the following outside of an f:view:

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

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

Thanks for the help BalusC.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号