为什么下面有效:
<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>
但是将命令链接移动到轮播中,它不起作用?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>
您没有显示代码的第二个版本(当您将p:commandLink
放入p:carousel
中时),但我想您将支持 bean 的一些属性放入p:commandLink
的属性value
.您必须知道 AJAX 请求也是请求,因此在每个 AJAX 请求中重新创建作用域 Bean。要保留属性的状态(您正在使用f:setPropertyActionListener
您必须使 bean 至少具有视图作用域,或者以某种方式在@PostConstructor
方法中保留状态。如果可以使用视图作用域 Bean,则应执行此操作。