为什么以下工作:
<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>
答案 0 :(得分:2)
您没有显示代码的第二个版本(当您将p:commandLink
放入p:carousel
时),但我认为您在value
p:commandLink
属性中添加了一些支持bean的属性{1}}。您必须知道AJAX请求也是请求,因此您请求在每个AJAX请求中重新创建scoped bean。要保留用于f:setPropertyActionListener
的属性状态,必须使bean至少以范围为视图,或以某种方式保留@PostConstructor
方法中的状态。如果你可以使用视图范围的bean,那就应该这样做。