是否有任何方法在ViewScope和RequestScope同时有一个bean



我有一个项目表,每一行都有一个链接,转发到编辑项目页面。要在编辑页面中加载数据,我需要请求范围中的托管bean(如果我将其放在视图范围中,则向前丢失数据)。

要在编辑页面中使用ajax,我需要在视图范围中管理bean,因为我必须保留一些值。如果我正在使用JSF 1.0和RichFaces,我会使用请求范围和a4j:keepalive

我如何通过PrimeFaces和JSF 2.0获得这个功能,或者我如何重新定义接口来获得这个功能?

好了,最后,根据下面的帖子,这是对我有用的:
Items表中的CommandButton:

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

管理bean中的操作:

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

edit.xhtml:

<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> 

itemMB:

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

要在编辑页面中加载数据,我需要请求范围中的托管bean(如果我将其放在视图范围中,我将在forward中丢失数据)。

您是否使用了没有重定向的导航规则(或隐式导航)?

一种解决方案是将"项目表"页面和"编辑项目"页面的备份bean都放在视图范围内,然后通过GET请求(例如使用<h:link>)或POST/重定向从第一个直接转到第二个,请求参数表示用户单击的行。

在第二页使用<f:viewParam>,方便地将请求参数转换回代表正在编辑的项目的实体。

如果你确实使用没有重定向的导航,那么这有一个额外的好处,你不会遭受臭名昭著的"一个url后面的问题",这可能会让你的应用程序的用户相当困惑,并成为一个噩梦的支持

相关内容

最新更新