0

这是用于 JSF 2.0 的 MyFaces CODI JSF-Module v1.0.1

我有一个使用@ViewAccessScoped 后备bean 的JSF 页面,它几乎可以满足我的要求,只是在我完成后它不会消失。该页面是从另一个页面调用的,如下所示:

  <h:link outcome="/editLocation" target="_blank" 
       value="Edit Location: #{maintLocation.selected.id}"
       disabled="#{!maintLocation.rowSelected}">                               
          <f:param name="locationID" value="#{maintLocation.selected.id}" />
          <f:param name="closeOnUpdate" value="true" />
  </h:link>

用户体验是editLocation页面在新窗口或新选项卡中弹出,用户对其进行编辑,如果closeOnUpdate参数设置为 true ,则在完成时调用window.close() 。

这一切都有效。但是,如果用户编辑另一个位置,ViewAccessScoped bean 仍然存在,因此它不会被重新实例化。因此,它永远不会看到参数,而只是根据先前的记录得出它所处的状态。

通过手动擦除浏览器 URL 窗口中的windowid参数,我可以获得一个新的支持 bean。有没有办法从h:link组件中删除它?

或者,有没有办法让bean在点击完成按钮后将自己从它所在的范围中移除?

4

1 回答 1

2

我在 CODI Wiki 页面上找到了答案。尽管我没有隐式使用 CODI 对话,但 @ViewAccessScoped 实现似乎是在它之上分层的。所以我可以这样做:

import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;

...

@Inject private Conversation conversation;

...

conversation.close();  // when I have committed to close the window.
于 2012-04-08T20:27:24.790 回答