0

为什么以下工作:

<h:form id="form1">
<p:carousel id="carousel" value="#{galleriaBean.paths_tn}" var="img" itemStyle="width: 200px">
<p:graphicImage value="#{img}"/>
</p:carousel>

<p:commandLink id="here" value="click me" update="hello11" oncomplete="dlg.show()">
<f:setPropertyActionListener value="hello!!!" target="#{galleriaBean.selected}"/>
</p:commandLink>

<p:dialog widgetVar="dlg">
<h:outputText id="hello11" value="#{galleriaBean.selected}"/>
</p:dialog>
</h:form>

但是将commandLink移到轮播中,它不起作用吗?setPropertyActionListener甚至不设置 bean 中的变量。

@RequestScoped CDI Bean。

<p:carousel id="carousel" value="#{galleriaBean.paths_tn}" var="img" itemStyle="width: 200px">
<p:graphicImage value="#{img}"/>
<p:commandLink id="here" value="click me" update=":form1:hello11" oncomplete="dlg.show()">
<f:setPropertyActionListener value="#{img}" target="#{galleriaBean.selected}"/>
</p:commandLink>
</p:carousel>
4

1 回答 1

2

您没有显示代码的第二个版本(当您放入 时p:commandLinkp:carousel,但我想您将支持 bean 的一些属性value放入p:commandLink. 您必须知道 AJAX 请求也是请求,因此您请求的作用域 bean 在每个 AJAX 请求中重新创建。要保留您正在使用的属性状态,f:setPropertyActionListener您必须使您的 bean 至少具有视图范围,或者以某种方式保留@PostConstructor方法中的状态。如果您可以使用视图范围的 bean,那么应该这样做。

于 2013-02-01T22:23:52.740 回答