2012-06-06 109 views
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。我試過immediate =「true」,但沒有增加任何內容。我真正想要的是知道值何時發生了變化,但不必擊中commandButton。

在以前question BalusC建議選用

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

我懷疑我需要類似的東西在這裏,但什麼樣的事件,我應該找誰?也許不是,那麼我需要做什麼才能在微調器中獲得更改而不必按下commandButton?謝謝,Ilan

我的bean是查看範圍。也許答案是使用另一個請求scoped-bean,並讓請求scoped-bean對視圖範圍的bean進行操作?如果這看起來像正確的方向,我會試試這個。

回答

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屬性中。如果您對舊的新值感興趣,則應使用valueChangeListener。

+0

此外,Primefaces展示中還有一些示例,其中一個用於Ajax Spinner:http://www.primefaces.org/showcase/ui/spinner.jsf –

+0

絕對美麗。當你知道答案時,這一切都很簡單。我將刪除存在的驗證程序,以便我可以捕捉到一個斷點。另外我看到你更新了我的bean refreshForm應該做的表單。也許我在這種情況下甚至不需要聽衆。謝謝你的美麗答案。 –

+1

請注意,在我的示例中'process'屬性設置爲'@ this',所以微調器更改將僅反映微調器本身的更改。但是你也可以把它改成'@ form'。通常你不需要監聽器功能來刷新表單。 –