我遇到以下情况:
场景:
在搜索时,支持bean会抛出异常,因为有很多null
值.原因是,当他们按下"搜索"时,页面处于RESTORE_VIEW
同步状态.
我尝试在页面上禁用缓存,强制用户刷新后退按钮上的页面,但是很多用户抱怨"为什么我不能使用后退按钮,我之前可以做到!" 由于他们认为应用程序在"确认表单重新提交"页面chrome/IE/Firefox show中崩溃,导致帮助台门票,因此管理人员希望我寻找替代方案.
我的问题:
可以检测RESTORE_VIEW的当前Phase_ID,而不是在此阶段进行任何处理以避免异常,但仅此一点,只需重新调整即可为用户提供部分页面视图.是否可以RENDER_RESPONSE
在此方案中放入页面然后进行处理?这应该刷新页面.
由于推荐(或普通/良好)实用是禁用动态页面上的缓存,我已经这样做了,并且必须重新教育顽固的用户.
但是我有以下问题.
当按下具有禁用缓存的页面上的"返回"按钮时,浏览器会显示"确认表单重新提交"(chrome),用户可以按Refresh / F5
或Enter
键.
如果Refresh/ F5
是动作,一切都可以,我检测到RESTORE_VIEW
相位并避免在该阶段中进行任何处理并让处理在RENDER_RESPONSE
阶段完成.但是,如果Enter
按下,则PhaseID处于,RENDER_RESPONSE(6)
但是几个下拉控件的值为null,这会导致页面失败.所以我进行检查以检测这些情况并显示FaceMessage以告诉用户刷新页面.
问题是,我可以强制页面刷新而不是强制用户这样做吗?此页面的导航案例格式为:
<navigation-rule>
<navigation-case>
<from-outcome>/app/ord/r1</from-outcome>
<to-view-id>/jsp/ordersHistory.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)
我已经看到在线代码片段faces-redirect=true
用于强制重新加载页面,但我无法让它工作!有什么建议?
在动态页面上禁用浏览器缓存是可行的方法.
至于此后引发的新问题,这很可能是由于webapp设计不佳造成的.重新设计您的webapp以使用GET而不是POST来进行普通的页面到页面导航(即使用<h:link>
或<h:outputLink>
代替<h:commandLink>
).为POST请求实现POST-Redirect-GET模式,需要将响应发送到不同的页面,或者更改它们以返回到同一页面并有条件地显示结果(如果可能的话,由ajax).检查某些表单是否不能更好地成为GET表单(例如,Google等搜索表单).重新思考如果该bean 确实需要是一个会话作用域,您通常只使用会话范围用于登录用户及其首选项,而不是请求或视图范围数据.
归档时间: |
|
查看次数: |
2553 次 |
最近记录: |