首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理Back Button和生成的Phase_ID

处理Back Button和生成的Phase_ID
EN

Stack Overflow用户
提问于 2012-06-08 00:24:51
回答 1查看 3K关注 0票数 0

我的处境如下:

TEST_PAGE

  • Users会话作用域Bean
  1. JSF (MyFaces 2.1.7和RichFaces 3.3.3)
  2. 将使用BACK按钮实现服务器

上的

  • 状态保存

设想情况:

用户单击一个链接以导航到具有会话作用域的(TEST_PAGE)

  • User页面,TEST_PAGE

  • User单击另一个链接

  • 用户按下brwoser的后退按钮,该按钮将它们放回TEST_PAGE

  • User中,尝试在此页面中搜索

在搜索时,backing抛出异常,因为有许多null值。原因是当他们按下“搜索”时,页面处于RESTORE_VIEW阶段。

我试着禁用页面上的缓存,以迫使用户刷新“后退”按钮上的页面,但是由于许多用户抱怨“为什么我不能使用后退按钮,我以前可以这样做!”由于他们认为应用程序在“确认表单重新提交”页面chrome/IE/Firefox显示上崩溃,所以经理们想让我寻找替代方案。

我的问题:

可以检测到当前的Phase_ID of RESTORE_VIEW,而不需要在此阶段进行任何处理以避免异常,但仅凭这一点就可以为用户提供部分页面视图。在这个场景中,是否可以将页面放在RENDER_RESPONSE中,然后进行处理?这应该会刷新页面。

问题2

由于建议(或公共/好的)实践是禁用动态页面上的缓存,我已经这样做了,并将不得不重新教育顽固的用户。

然而,我有以下问题。

当在禁用缓存的页面上按后退按钮时,浏览器会显示“确认表单重新提交”(chrome),用户可以在其中按Refresh / F5Enter键。

如果Refresh/ F5是操作,那么在我检测到RESTORE_VIEW阶段并避免在该阶段进行任何处理时,一切都是正常的,让处理在RENDER_RESPONSE阶段进行。但是,如果按下Enter,则PhaseID在RENDER_RESPONSE(6)中,但很少有下拉控件的值为null,这将导致页面失败。因此,我进行了检查,以检测这种情况,并显示一个FaceMessage告诉用户刷新页面。

问题是,我是否可以强迫页面刷新而不是强迫用户这样做?此页面的导航用例格式如下:

代码语言:javascript
复制
     <navigation-rule>
      <navigation-case>
       <from-outcome>/app/ord/r1</from-outcome>
       <to-view-id>/jsp/ordersHistory.jsp</to-view-id>
      </navigation-case>
     </navigation-rule>

我在网上看到了一些代码片段,其中使用faces-redirect=true来强制重新加载页面,但我无法做到这一点!有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-08 01:35:32

禁用动态页面上的浏览器缓存是可行的方法。

至于在此之后出现的新问题,这很可能是由于网页应用程序设计不佳所致。重新设计您的网页应用程序,使用GET而不是POST进行普通的页面对页导航(即只使用<h:link><h:outputLink>而不是<h:commandLink>)。实现POST请求的possible模式,它需要将响应发送到不同的页面,或者将它们更改为返回到相同的页面,并在可能的情况下通过ajax有条件地显示结果。检查某些表单是否最好是获取表单(例如,像Google这样的搜索表单)。重新考虑这个bean是否真的需要是会话作用域的bean,通常只对登录用户和它的首选项使用会话范围,而不是对请求或查看作用域的数据。

另请参阅:

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10941664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档