2011-12-29 56 views
1

我有一個項目表,並在每一行中有一個鏈接轉發到編輯項目頁面。要在編輯頁面加載數據,我需要託管的bean在請求範圍內(如果我把它放在視圖範圍內,我會在前進中丟失數據)。有沒有辦法在同一時間在ViewScope和RequestScope中有一個bean

在編輯頁面中使用ajax我需要在視圖中的託管bean範圍由於我必須保留一些值。如果我正在使用JSF 1.0和RichFaces,我會使用請求範圍和a4j:keepalive來完成。

如何使用PrimeFaces和JSF 2.0獲得此功能性,或者如何重新定義界面以獲取此功能?

好吧,最後基於以下這個崗位對我來說是什麼工作:
命令按鈕在項目表:

public String editItem(Integer id){ 
return "/pages/items/edit.xhtml?faces-redirect=true&id="+id; 
} 

edit.xhtml:在託管bean

<o:commandButton id="editButton" 
action="#{itemTableMB.editItem(item.id)}" styleClass="botonTabla"> 
<h:graphicImage styleClass="imagenBotonTabla" url="/resources/images/icons/pencil.png"/> 
</o:commandButton> 

行動:

<f:metadata> 
    <f:viewParam id="id" name="id" value="#{itemMB.item.id}" required="true"> 
    </f:viewParam> 
    <f:event type="preRenderView" listener="#{itemMB.loadItem}" /> 
</f:metadata> 

聽衆in itemMB:

public void loadItem(){ 
     this.item = this.itemManager.get(this.item.getId()); 
} 

回答

1

到編輯頁面,我需要在申請範圍內的託管bean加載數據(如果我把它放在視圖範圍內我向前丟失數據)。

您是否使用不帶重定向的導航規則(或隱式導航)?

一個解決方案是將「項目表」頁面和「編輯項目」頁面的後臺bean放在視圖範圍內,然後直接通過GET請求從第一個移動到第二個例如使用<h:link>)或帶請求參數的POST /重定向,該請求參數表示用戶點擊的行。

在第二頁上使用<f:viewParam>可方便地將請求參數轉換回表示正在編輯的項目的實體。

如果您確實在不使用重定向的情況下使用導航,那麼這樣做還有額外的好處,您不會遭受臭名昭着的「單一URL後面的問題」,這可能會讓您的應用程序的用戶感到困惑,支持的噩夢。

+0

這似乎是個好主意,我會試試看! – 2011-12-30 07:23:33

相關問題