【问题标题】:Is there any way to have a bean in ViewScope and RequestScope at same time有什么办法可以同时在 ViewScope 和 RequestScope 中有一个 bean
【发布时间】:2011-12-29 16:56:27
【问题描述】:

我有一个项目表,每一行都有一个链接可以转发到编辑项目页面。要在编辑页面中加载数据,我需要请求范围内的托管 bean(如果我把它放在视图范围内,我会在转发中​​丢失数据)。

要在编辑页面中使用 ajax,我需要在视图 Scope 中使用托管 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;
}

编辑.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());
}

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    要在编辑页面中加载数据,我需要请求范围内的托管 bean(如果我把它放在视图范围内,我会在转发中​​丢失数据)。

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

    一种解决方案是将“项目表”页面和“编辑项目”页面的支持 bean 放在视图范围内,然后通过 GET 请求直接从第一个到第二个(例如使用&lt;h:link&gt;) 或带有请求参数的 POST/redirect 表示用户单击的行。

    使用第二页上的&lt;f:viewParam&gt; 可以方便地将请求参数转换回代表正在编辑的项目的实体。

    如果您确实在使用没有重定向的导航,那么这还有一个额外的好处,即您不会受到臭名昭著的“单 URL 隐藏问题”的影响,这可能会让您的应用程序的用户感到相当困惑,并成为一个支持的噩梦。

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      相关资源
      最近更新 更多