我正在使用p:dataList
,因为我正在开发一个显示项目列表的PrimeFaces移动视图。单击任何项目时,应显示同一视图的另一个pm:view
。但是应该通知bean所选项目。
不幸的是我无法找到成功更新bean的方法:dataTable中的<p:ajax>
会抛出此异常:
<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移动列表中使用而优化的组件。但如果有必要,我可以找到其他选择。
答案 0 :(得分:1)
我在showcase(标题为新闻的示例)中找到了解决问题的正确方法:
<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>
答案 1 :(得分: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>