3

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

<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 以及验证器和 valueChangeListener 中设置了断点,并且只有在我按下 commandButton 时才会触发它们。我试过立即=“真”,但这并没有增加任何东西。我真正想要的是知道值何时更改,但不必点击命令按钮。

在之前的问题中,BalusC 建议使用

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

我怀疑我在这里需要类似的东西,但我应该寻找什么样的事件?也许不是,那么我需要做什么才能在微调器中进行更改而无需按下命令按钮?谢谢,伊兰

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

4

1 回答 1

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放在p:ajax. 如果您对旧值和新值感兴趣,则应使用 valueChangeListener 。

于 2012-06-06T11:28:51.760 回答