java - 强制执行 javax.faces.application.ViewExpiredException 来测试应用程序

标签 java jsf viewexpiredexception

我想测试我的 Web 应用程序 (JSF 2.2),它有一个自定义的 Esxception Handler Factory。 现在我想知道当抛出 javax.faces.application.ViewExpiredException 时一切是否按预期工作。有什么办法可以减少等待此异常的时间吗? 以编程方式抛出它不是一个选择,因为我希望有一个几乎 100% 高效的测试场景。

最佳答案

就我而言,在服务器端保留 JSF View 状态时,强制 session 过期应该足够了:

Setting STATE_SAVING_METHOD to client has however an additional functional advantage: it prevents ViewExpiredExceptions when the session has expired or when the client opens too many views.

因此,由于 javax.faces.STATE_SAVING_METHOD 默认为 server,您只需指定 Http session 所需的超时即可:

<session-config>
    <session-timeout>2</session-timeout>
</session-config>

作为替代方案,您可以选择设置自己的观看次数限制。这取决于具体的 JSF 实现,Mojarra 默认为 16,MyFaces 默认为 20。对于第一个,您可以使用 com.sun.faces.numberOfLogicalViews 来减少每个客户端同时接受的 View 数量。例如,当您在同一浏览器(同一 Http session )中打开四个选项卡时,将其设置为 3 应该会引发异常。

另请参阅:

关于java - 强制执行 javax.faces.application.ViewExpiredException 来测试应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24650571/

相关文章:

java - 更好 <h :selectManyCheckbox> layout?

java - 从 JasperReports 打印 PDF

ajax - JSF/PrimeFaces ajax 请求上的 session 超时和 ViewExpiredException 处理

java - 在java中使用正则表达式从基于下划线的字符串中获取子字符串

java - 在cql中创建列族?

jsf - 读取托管 bean 中的资源包属性

jsf - Web.xml 中的 java.lang.Throwable 错误页面中显示的 ViewExpiredException

ajax - javax.faces.application.ViewExpiredException 和错误页面不工作

java - 为什么千位分隔符称为 "grouping separator"?

java - 在 Java 中嵌套 try/catch 语句是否可以接受?