从Primefaces微调器的值更改更新表单

时间:2012-06-06 10:40:05

标签: jsf primefaces

我正在尝试根据微调器的更改来更新我的表单

<p:spinner id="spin1" min="1" max="#{editPhoto.max}" size="1" 
           value="#{editPhoto.page}" validator="#{editPhoto.validator()}" 
           valueChangeListener="#{editPhoto.refreshForm()}" />
<p:commandButton value="Insert" action="#{editPhoto.insertImage()}"  />
<p:commandButton value="Delete" action="#{editPhoto.deleteImage()}" />

我在值,setPage以及validator和valueChangeListener中添加了断点,当我按下commandButton时它会点击 。我试过立即=“真实”,但这没有增加任何东西。我真正想要的是知道值何时被更改,但无需点击commandButton。

在之前的question BalusC建议使用

<f:event type="preRenderView" listener="#{nextpageBacking.onPreRenderView}" />

我怀疑我需要类似的东西,但我应该寻找什么样的事件?也许不是,那么我需要做什么才能在不需要按下commandButton的情况下更改微调器?谢谢,伊兰

我的bean是视图范围的。也许答案是使用另一个请求scoped-bean并让请求scoped-bean对视图范围的bean进行操作?如果这看起来像是正确的方向,我会尝试这个。

1 个答案:

答案 0 :(得分:4)

您应该使用f:ajaxp:ajax

valueChangeListener只会在提交整个表单或微调器时触发。

<p:spinner id="spin1" min="1" max="#{editPhoto.max}" size="1" 
           value="#{editPhoto.page}" validator="#{editPhoto.validator()}">
    <p:ajax listener="#{editPhoto.refreshForm()}" 
            update="@form" process="@this" />
</p:spinner>

微调器的valueChangeListener属性不是解雇方法的最佳位置。您最好将其放在listener的{​​{1}}属性中。如果您对旧的感兴趣,则应使用valueChangeListener。