【问题标题】:Update form from value change of Primefaces spinner从 Primefaces 微调器的值变化更新表单
【发布时间】:2012-06-06 10:40:05
【问题描述】:

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

<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 时,它 击中它们。我试过立即=“真”,但这并没有增加任何东西。我真正想要的是知道值何时更改,但不必点击命令按钮。

在之前的questionBalusC 建议使用

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

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

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

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    您应该使用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 属性不是触发您的方法的最佳位置。你最好把它放在p:ajaxlistener 属性中。如果您对旧的新值感兴趣,则应该使用 valueChangeListener。

    【讨论】:

    • 另外,Primefaces的showcase里也有例子,一个是Ajax Spinner的:primefaces.org/showcase/ui/spinner.jsf
    • 绝对漂亮。当您知道答案时,一切都变得如此简单。我将删除存在的验证器,这样我就可以抓住一个断点。我还看到你更新了我的 bean refreshForm 应该做的表单。在这种情况下,也许我什至不需要监听器。感谢您的美丽回答。
    • 请注意,在我的示例中,process 属性设置为 @this,因此微调器更改只会反映微调器本身的更改。但您也可以将其更改为@form。通常你不需要监听函数来刷新表单。
    • 很好的例子......你真的帮我解决了这个问题!谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多