Jsf 2 如何继续JSF:在结束阶段调用应用程序的异常之后呈现\u响应阶段
在INVOKE_应用程序阶段获得特定的自定义异常之后,我想继续讨论JSF:RENDER_响应(JSF生命周期的最后一个阶段) 对于以下操作,所有六个JSF生命周期阶段都将运行: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
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.FinalJSF在默认情况下已经做到了这一点。因此,应用程序中的某些内容正在干扰默认行为。从目前提供的信息来看,原因尚不清楚。当我们从一个完全空白的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>