Vic*_*Vic 10 myfaces jsf-2 tomcat7
我在视图Scoped Bean中有一个方法,带有@PreDestroy
注释,另一个带有@PostConstruct
注释.
@PostConstruct
每次导航到使用此视图范围bean的页面时,都会正确调用该方法.
但是,当我导航到新页面(不使用此视图范围bean)时<h:link/>
,@PreDestroy
永远不会调用该方法.
我不是在谈论手动更改网址或会话结束,仅仅是导航案例.
我错过了什么?
提前致谢
Bal*_*usC 18
这是设计的.当POST动作导致导航不是对同一视图的回发时(即动作方法没有返回,null
或者void
是一个值得一提的String
,即使只是空的),它也只会立即被破坏.
将<h:link>
产生不调用任何POST动作的GET链接.由于在卸载视图时无法通过(XML)HTTP请求通知服务器端,因此无法通知JSF销毁与视图关联的视图范围bean.在这种情况下,视图范围bean将仅在会话到期时或会话中的最大逻辑视图超出(默认值为15)且相关视图按顺序排列时销毁.
如果你真的想通过一个navigaiton动作来驱逐视图范围的bean,那么最好的办法就是把它作为POST请求,<h:commandLink>
然后通过返回导航结果和?faces-redirect=true
参数来发出重定向.但这毕竟不是SEO友好,因为机器人不会索引POST链接.
我毕竟不关心仍然在会议中的观点.如果您打算进行一些清理或记录,我会寻找其他方法,具体取决于具体的功能要求.
从理论上讲,HTML DOM onbeforeunload
事件是可能的,但这是一个非标准事件,并且未指定浏览器行为,以便在该事件期间发送ajax请求时会发生什么.它有时会到来,但有时也不会.更新:实际上,OmniFaces@ViewScoped
自OmniFaces 2.2在同步XHR的帮助下实现了这一功能,并且它在主流浏览器中运行良好.从版本2.3开始,它甚至在物理上破坏了相关的JSF服务器端视图状态.
归档时间: |
|
查看次数: |
5983 次 |
最近记录: |