2

如何控制在请求期间创建的自定义范围。现在我有解决方案,当我单击 commandLink 时:

<h:commandLink action="orders">
  <f:actionListener type="com.mk.web.jsf.scope.ResetScopeListener" />
  <span data-shortcut="F6" class="start_link">Orders</span>
</h:commandLink>

自定义范围被销毁并创建一个新范围。但问题是,只有当我使用上面的 commandLink 输入客户操作时,自定义范围才会重置。当我通过直接在浏览器中输入 url 进入客户操作时,自定义范围不会重置。我怎样才能做到这一点,即使是通过 commandLink 或 url 加载客户操作,那么始终应重置此自定义范围。有人可以给我一些建议如何实现这一目标吗?

谢谢...

4

1 回答 1

1

通常,当您希望 bean 的寿命比原始请求长但比会话短时,您会使用自定义范围。不过,根据您的情况,在我看来,您的自定义范围的行为有点像请求范围。无论如何,也许我没有完全理解您的场景,但想到的一件事是您可以使用系统事件,以防用户在直接键入地址时决定转到下一页。所以假设用户试图去nextPage.xhtml,它可以这样定义

<f:event type="preRenderView" listener="#{bean.performPossibleCustomScopeCleanUp}" />
 <h:head>
 </head>

上面的(伪)方法将在视图根(aka nextPage.xhtml)被渲染之前触发。在该方法中,您可以检查您的自定义范围是否仍然“活动”,您将根据需要对其进行处理。请记住,每次请求页面时都会触发此事件。例如,如果您单击h:commandLink performPossibleCustomScopeCleanUp仍将被调用。有办法解决这个问题

<f:metadata>、<f:viewParam> 和 <f:viewAction> 可以用来做什么?

只需向下滚动到对答案的GET 参数执行业务操作部分

更好的方法是NavigationHandler通过 JSF 的 ConfigurableNavigationHandlerAPI 实现自定义,这样您就可以跟踪 URL 并根据需要执行操作。我没有挖得太深,因此您实际上可能会找到更好的代码示例。希望这可以帮助。

于 2013-06-29T08:37:42.430 回答