这是针对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从命中范围中删除自己的范围?
答案 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.