Jsf 2 如何继续JSF:在结束阶段调用应用程序的异常之后呈现\u响应阶段

Jsf 2 如何继续JSF:在结束阶段调用应用程序的异常之后呈现\u响应阶段,jsf-2,Jsf 2,在INVOKE_应用程序阶段获得特定的自定义异常之后,我想继续讨论JSF:RENDER_响应(JSF生命周期的最后一个阶段) 对于以下操作,所有六个JSF生命周期阶段都将运行: public void save(String actionID) throws Exception { } 我在日志中得到的是: START PHASE RESTORE_VIEW 1 END PHASE RESTORE_VIEW 1 START PHASE APPLY_REQUEST_VALUES 2 END

在INVOKE_应用程序阶段获得特定的自定义异常之后,我想继续讨论JSF:RENDER_响应(JSF生命周期的最后一个阶段)

对于以下操作,所有六个JSF生命周期阶段都将运行:

public void save(String actionID) throws Exception
{
}
我在日志中得到的是:

 START PHASE RESTORE_VIEW 1
 END PHASE RESTORE_VIEW 1
 START PHASE APPLY_REQUEST_VALUES 2
 END PHASE APPLY_REQUEST_VALUES 2
 START PHASE PROCESS_VALIDATIONS 3
 END PHASE PROCESS_VALIDATIONS 3
 START PHASE UPDATE_MODEL_VALUES 4
 END PHASE UPDATE_MODEL_VALUES 4
 START PHASE INVOKE_APPLICATION 5
 END PHASE INVOKE_APPLICATION 5
 START PHASE RENDER_RESPONSE 6
 END PHASE RENDER_RESPONSE 6
但对于以下操作(操作引发异常):

我得到:

START PHASE RESTORE_VIEW 1
 END PHASE RESTORE_VIEW 1
 START PHASE APPLY_REQUEST_VALUES 2
 END PHASE APPLY_REQUEST_VALUES 2
 START PHASE PROCESS_VALIDATIONS 3
 END PHASE PROCESS_VALIDATIONS 3
 START PHASE UPDATE_MODEL_VALUES 4
 END PHASE UPDATE_MODEL_VALUES 4
 START PHASE INVOKE_APPLICATION 5
WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-0.0.0.0-0.0.0.0-8080-1) #{bandListController.save('Band.Create.Action.Save')}: com.alt.security.exception.FieldMissingException: LLLL: javax.faces.FacesException: #{bandListController.save('Band.Create.Action.Save')}: com.alt.security.exception.FieldMissingException: LLLL
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
.
.
.
END PHASE INVOKE_APPLICATION 5
未执行渲染响应阶段。 在应用程序阶段获得异常后如何移动到下一阶段。

为了全局处理异常,我还创建了ExceptionHandlerFactory和ExceptionHandler

@覆盖
公共无效句柄()
面部性感觉
{
对于(最终迭代器it=getUnhandledExceptionQueuedEvents().Iterator();it.hasNext();){
Throwable t=it.next().getContext().getException();
while((t instanceof FacesException)和&t.getCause()!=null){
t=t.getCause();
}
if(FieldMissingException的t实例){
//-->我应该在这里写些什么来停止将自定义异常传播到下一阶段
//最终FacesContext FacesContext=FacesContext.getCurrentInstance();
//facesContext.responseComplete();
}
}
getWrapped().handle();
}
添加有关项目的更多信息:
-->web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <display-name>AltAdminWAR</display-name>

    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

    <!-- Welcome page -->
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>

    <!-- JSF mapping -->
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Map these files with JSF -->

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>


    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    <error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/</location>
    </error-page>
    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>
</web-app>

阿尔塔德米瓦尔
javax.faces.PROJECT_阶段
发展
index.xhtml
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
*.jsf
*.xhtml
PrimeFaces文件上载筛选器
org.primefaces.webapp.filter.FileUploadFilter
PrimeFaces文件上载筛选器
Facesservlet
javax.faces.application.ViewExpiredException
/
15
-->face-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
    <application>
    </application>
    <lifecycle>
        <phase-listener>com.alt.security.test.LifeCycleListener</phase-listener>
    </lifecycle>
    <factory>
        <exception-handler-factory>com.alt.security.test.ExceptionHandlerFactory</exception-handler-factory>
    </factory>
</faces-config>

com.alt.security.test.LifeCycleListener
com.alt.security.test.ExceptionHandlerFactory
-->jsf和primeface的pom文件条目

<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>5.1</version>
</dependency>

javax.faces
JSFAPI
2
org.primefaces
素面
5.1

JBoss服务器:JBoss-as-7.1.1.Final

JSF在默认情况下已经做到了这一点。因此,应用程序中的某些内容正在干扰默认行为。从目前提供的信息来看,原因尚不清楚。当我们从一个完全空白的web项目开始,所有内容都设置为默认值和最新版本时,我们如何重现您的问题?@BalusC感谢您的回复。我应该提供什么额外的细节?@BalusC,我已经添加了环境的细节。默认情况下,jsf已经这样做了。因此,应用程序中的某些内容正在干扰默认行为。从目前提供的信息来看,原因尚不清楚。当我们从一个完全空白的web项目开始,所有内容都设置为默认值和最新版本时,我们如何重现您的问题?@BalusC感谢您的回复。我应该提供什么额外的细节?@BalusC,我已经添加了环境细节
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
    <application>
    </application>
    <lifecycle>
        <phase-listener>com.alt.security.test.LifeCycleListener</phase-listener>
    </lifecycle>
    <factory>
        <exception-handler-factory>com.alt.security.test.ExceptionHandlerFactory</exception-handler-factory>
    </factory>
</faces-config>
<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>5.1</version>
</dependency>