ui:repeat内的复合组件导致actionSource不会触发

时间:2011-10-13 19:38:00

标签: jsf-2 composite-component uirepeat

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

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

我能错过什么?

1 个答案:

答案 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的帮助。