ViewExpiredException重定向不在视图中使用JSTL标记forEach

时间:2016-12-05 10:45:18

标签: jsf jstl

环境: 我有一个使用WildFly 10.0.0.Final的EAR应用程序。它有一个用于Web应用程序的模块,它基于JSF Mojarra 2.2.12-jbossorg-2 20150729-1131(使用PrimeFaces 6用于UI,Omnifaces 2.5.1用于其他实用程序)。

使用案例 我的问题是关于视图到期。我将我的应用简化为包含问题的小豆/视图展示。用例非常简单:如果视图已过期且用户触发某些操作,则应将其重定向到视图过期页面。我正在使用Omnifaces FullAjaxExceptionHandler。

问题: 视图到期时的重定向几乎适用于所有情况。但是在我的视图中使用JSTL标记<c:forEach/>后它就不再起作用了。然后,HTTP请求在我的Chrome开发工具中只有一个状态(失败),没有任何反应。

以下Bean / View组合显示问题:

查看:text.xhtml

<!DOCTYPE html>
<html lang="en"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:p="http://primefaces.org/ui"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head id="head">
  <title>Test</title>
</h:head>

<h:body>
  <h:form>
    <p:commandButton action="#{TestBean.throwError()}" value="Throw" update=":test"/>
  </h:form>

  <h:panelGroup id="test">
    Test
  </h:panelGroup>

  <c:forEach items="#{TestBean.list}" var="item">
    #{item.toString()}
  </c:forEach>

  <p>
    <input type="button" value="Invalidate session"
       onclick="$.get('#{request.contextPath}/invalidatesession?#{now.time}', alert('Session invalidated!'))"/>
  </p>
</h:body>
</html>

Bean:Test.java

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.inject.Named;

import org.omnifaces.cdi.ViewScoped;

@ViewScoped
@Named(value = "TestBean")
public class Test implements Serializable
{
    private static final long serialVersionUID = -6513676596620667863L;

    private List<String> list = new ArrayList<>();

    @PostConstruct
    public void init()
    {
        this.list.add("aaaaa");
        this.list.add("bbbbb");
        this.list.add("ccccc");
    }

    public void throwError()
    {
        throw new IllegalArgumentException("bla");
    }

    public List<String> getList()
    {
        return this.list;
    }
}

使用JSTL标记<c:forEach/>几乎是Omnifaces的FullAjaxExceptionHandler Show Case。一旦我从我的视图中删除它,每个人都可以正常工作。

0 个答案:

没有答案