2012-07-31 106 views
2

我有一個請求範圍的bean,它是從表單中填充各種屬性的。這些屬性然後用於更新另一個視圖範圍的bean。現在我想讓用戶有可能以這種方式重置表單,即所有表單字段都保存第一次加載頁面時的值。不要填寫請求範圍的bean

@ManagedBean 
@RequestScoped 
public class ItemSearchBean { 

    private Rarity minRarity = Rarity.None; 
    private Rarity maxRarity = Rarity.None; 

    ... 

} 

注意,雖然該表單submiting按鈕實際上調用一個Ajax請求,此處不再重新加載整個頁面接着說:這些值是通過bean本身定義。

的提交按鈕:

<p:commandButton value="Search" 
    actionListener="#{itemSearchBean.refreshTable}" 
    update="itemTable,notify"/> 

我已經嘗試過用一個簡單的復位按鈕,但它只reseted形式到最後提交的值:

<p:commandButton type="reset" value="Reset"/> 

一個人莫名其妙地問服務器爲新鮮的新bean(或阻止它填充bean),但我不知道如何做到這一點。

回答

2

你應該能夠做到這一點與普通的HTML鏈接到了同樣的觀點:

<a href="yourpage.xhtml">Reset</a> 

還是讓JSF創建鏈接給你:

<h:link value="Reset" /> 

這種方式,您將有一個新的GET請求會創建一個新的UIViewRoot,就像在新的瀏覽器標籤中訪問相同的視圖一樣。

如果你想有一個按鈕,而不是,你可以使用一個h:button

<h:button value="Reset" /> 

該按鈕將依賴於一個Javascript將重新加載上單擊頁面。

+0

謝謝,這是按預期工作,但是有沒有一種方法可以在ajax的基礎上做到這一點(希望不是通過手動設置每個屬性)來省略完整的頁面重新加載? – Paranaix 2012-07-31 13:35:09

+0

不客氣。不,我不知道。但實際上,重新加載頁面並不壞,HTTP流程不會比這更簡單,並且您的代碼保持在最低限度。 :)我不認爲這種事情的AJAX會帶來很多收益。 – elias 2012-07-31 14:03:10

1

你也可以做兩個階段的設置。多一點工作,但是如果你進一步研究,可以使用各種撤消工作流程。

基本上,有兩個bean用通常的訪問器/增變器對來封裝你的表單。那麼在你的控制器中,只顯示一個(x或y),那就是你的「表單bean」。在y中,您存儲從存儲庫檢索到的原始副本,這樣您就可以執行字段級別或bean級別的歸還,而無需重新加載頁面或從回購中完成全部數據重新存儲。

所以,簡單地說:

  • 2豆封裝形式(你甚至可以重新使用您的實體,如果它映射到形式)。
  • 填充無論從數據馬歇爾
  • 期間回購暴露一個在小面的用戶
  • 保持第二作爲備份,用於復位/恢復字段或整個形式

還有其他如何去皮膚「撤消」貓,而這只是另一種。

相關問題