0

我正在使用p:dataList,因为我正在开发一个显示项目列表的 PrimeFaces 移动视图。单击任何项​​目时,pm:view应显示另一个相同的视图。但应通知 bean 所选项目。

不幸的是,我找不到成功更新 bean 的方法:<p:ajax>在 dataTable 内部抛出此异常:

<p:ajax> Unable to attach <p:ajax> to non-ClientBehaviorHolder parent

在迭代元素内部使用<f:setPropertyActionListener>也失败了,因为我得到:

<f:setPropertyActionListener> Parent is not of type ActionSource

这是我的代码:

<pm:view  id="instrumentsView" >
    <pm:content >
        <h:form id="instrumentsList" >                            
            <p:dataList var="instrument" value="#{instrumentBean.subscribedInstruments}" >
                <h:outputLink value="#newView" >#{instrument.longName}</h:outputLink>
                <f:setPropertyActionListener value="#{instrument}" target="#{instrumentBean.selectedInstrument}" />
            </p:dataList>
        </h:form>
    </pm:content>
</pm:view>

显然,我使用的是 dataList 和 outputLink,因为据我了解,它们是针对 PrimeFaces 移动列表中使用而优化的组件。但如有必要,我可以找到其他选择。

4

2 回答 2

1

我在展示(标题为News的示例)中找到了处理问题的正确方法:

<p:dataList var="instrument" value="#{instrumentBean.subscribedInstruments}" >
    <p:column >
        <p:commandLink value="#{instrument.longName}" action="pm:newView" update=":compId">
            <f:setPropertyActionListener value="#{instrument}" target="#{instrumentBean.selectedInstrument}" />
        </p:commandLink>
    </p:column>
</p:dataList>
于 2013-01-28T21:57:57.683 回答
1

primefaces 文档中有一个主题对此进行了解释。

选择数据(第 124 页) indexed_primefaces_users_guide_3_5.pdf http://www.primefaces.org/documentation.html

这里是内容

    <h:form id="carForm">
    <p:dataGrid var="car" value="#{carBean.cars}" columns="3" rows="12">
        <p:panel header="#{car.model}">
            <p:commandLink update=":carForm:display" oncomplete="dlg.show()">
                <f:setPropertyActionListener value="#{car}"
                    target="#{carBean.selectedCar}"
                    <h:outputText value="#{car.model}" />
            </p:commandLink>
        </p:panel>
    </p:dataGrid>
    <p:dialog modal="true" widgetVar="dlg">
        <h:panelGrid id="display" columns="2">
            <f:facet name="header">
                <p:graphicImage value="/images/cars/#{car.manufacturer}.jpg" />
            </f:facet>
            <h:outputText value="Model:" />
            <h:outputText value="#{carBean.selectedCar.year}" />

        </h:panelGrid>
    </p:dialog>
</h:form>
于 2013-07-31T00:28:58.590 回答