从ViewAccessScope中删除Bean

时间:2012-04-07 21:55:23

标签: jsf-2 codi

这是针对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 页面会在新窗口或新标签页面中弹出,用户会对其进行编辑,完成后会调用 window.close()如果 closeOnUpdate 参数设置为true。

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

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

或者,是否有一种方法可以让bean从命中范围中删除自己的范围?

1 个答案:

答案 0 :(得分:2)

我在the CODI Wiki page找到了答案。虽然我没有暗中使用CODI Conversations,但@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.