使用PF 3.0-RC1快照(11/22/2011)
我有一个复合组件.我想在进行选择时调用valueChangeListener,但它似乎没有调用监听器.
以下是组件的代码:
<p:selectOneMenu style="width: 220px;"
value="#{customerProfileSessionBean.selectedAccount}"
valueChangeListener="#{customerProfileSessionBean.accountValueChange}" >
<f:selectItems value="#{sessionBean1.custAccountList}"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
支持bean中的侦听器有一个未被调用的print语句(至少我没有在服务器日志中看到它).
还有什么我需要做的是在值改变时调用valueChangeListener吗?我需要使用吗?
另外,在监听器中,是否有传递的ValueChangeEvent?
谢谢.
Bal*_*usC 35
您似乎期望valueChangeListener
在客户端发生更改事件时立即调用服务器端的方法.这是不正确的.只有在将表单提交给服务器并且新值不是equals()
旧值时才会调用它.
至少有两种方法可以实现您的功能需求:
添加onchange="submit()"
以便JavaScript在您更改值时提交表单:
<p:selectOneMenu style="width: 220px;"
value="#{customerProfileSessionBean.selectedAccount}"
valueChangeListener="#{customerProfileSessionBean.accountValueChange}"
onchange="submit()">
<f:selectItems value="#{sessionBean1.custAccountList}"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
然而,这是非常JSF-1.x-ish并且对用户体验不利.它还将提交(并转换/验证!)所有其他输入字段,这些字段可能不是您想要的.
相反,请使用ajax监听器,以确定您是否对实际值更改不感兴趣(即旧值对您不感兴趣),但您实际上对更改事件本身感兴趣.您可以使用<f:ajax>
以下方法在PrimeFaces组件中执行此操作<p:ajax>
:
<p:selectOneMenu style="width: 220px;"
value="#{customerProfileSessionBean.selectedAccount}">
<p:ajax listener="#{customerProfileSessionBean.accountValueChange}" />
<f:selectItems value="#{sessionBean1.custAccountList}"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
并用ValueChangeEvent
参数替换AjaxBehaviorEvent
参数.
归档时间: |
|
查看次数: |
55116 次 |
最近记录: |