2011-12-29 57 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

相关问题