- 浏览: 1394490 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (328)
- JSF (27)
- 生活 (12)
- Ajax (26)
- Maven (6)
- CSS (1)
- Shale (3)
- SiteMesh (1)
- Ext (15)
- JMX (2)
- Windows技巧 (7)
- 工作感悟 (18)
- SVN (2)
- SVG (0)
- GoogleGear (0)
- RAP (2)
- SOA与WebService (3)
- 笔记本技术研究 (1)
- Microsoft (2)
- 英语学习 (3)
- PHP (7)
- web 2.0 (6)
- 语义Web (1)
- IT史话 (3)
- iText (3)
- JVM (1)
- PropertiesEditor (1)
- J2SE (33)
- Spring (2)
- Java Batch (1)
- log (2)
- Struts2 (2)
- DWR (0)
- JAAS (3)
- EJB3 (4)
- Flex (8)
- JFreeChart (1)
- WAS (0)
- 数据库 (2)
- 摄影 (0)
- SQL (1)
- Google App Engine (1)
- linux (5)
- Eclipse plugin (10)
- Testing (0)
- Portal (0)
- 移动互联网 (0)
- SWTBot (1)
最新评论
-
江奇缘:
不错!!!!!!
web.xml里<filter-mapping>中的<dispatcher>作用 -
yy8093:
commonj 第三步,那个调用的方法要在哪里调?servle ...
JAVA中多种计时器的比较与分析 -
di1984HIT:
学习了,不错~
web.xml里<filter-mapping>中的<dispatcher>作用 -
penkee:
com.lowagie.text.DocumentExcept ...
iText中输出 中文 -
氵壞男亼乀:
我想请问下 你哪个html里面引入的几个js文件没看懂!你 ...
DWR入门教程之HelloWorld
JSF中Exception的处理<o:p></o:p>
环境: myfaces1.1.5,richfaces1.3,Websphere6.1
目标:
统一处理应用中的Exception,解析其中的错误信息,使用Globalization 来显示消息。
分析:
JSF中有两类error,一类是input error,是由用户输入错误的信息造成的,一般在input 验证或者转化过程中会出现;另一类是application error,是系统中可能出现的各种错误,如SQLException、NullPointerException等。对于application error,在系统中会统一抛出AppException,然后由我们自己订制的ActionListener处理;而对于input error,则由JSF处理。下面详细讨论如何处理application Error.
思路:将Exception转化为Faces Message处理。
在系统中我们采用两种策略共同处理Exception。即当JSF请求处理中出现Exception时,采取第一种策略,在这个页面上显示一条消息提示用户;当非JSF请求出现Exception时,将这个Exception抛给Web Container,并将页面导航到某一个错误页面。。
<o:p> </o:p>
实现:<o:p></o:p>
下面分别讨论这两种策略如何实现。<o:p></o:p>
第一种,JSF请求,弹出提示消息。<o:p></o:p>
在我们的系统中,综合使用Exception 和 FacesMessage来综合处理Exception,当Exception抛出时,尤其是Business Exception发生时,这个Exception是发生在JSF的InvokeAppication Phase,因此通过订制ActionListener就捕获这个Exception,并将这个Exception转化为FacesMessage,并根据Exception的Message到资源文件中加载对应的国际化。
当ActionListen无法捕获这个Exception时,将这个错误发送到WebContainer,并转向error页面。这时,对于这个请求的响应会产生500等Error Code并发送到客户端。
因此,首先要定制JSF的ActionListener,在其上添加以下方法:<o:p></o:p>
try {<o:p></o:p>
outcome = (String) methodBinding.invoke(facesContext, null);<o:p></o:p>
} catch (Exception e) {<o:p></o:p>
Throwable cause = e.getCause();<o:p></o:p>
if (cause != null && cause instanceof AbortProcessingException) {<o:p></o:p>
throw (AbortProcessingException) cause;<o:p></o:p>
} else {<o:p></o:p>
Exception ex = (Exception) e.getCause();<o:p></o:p>
String message = ex.getMessage();<o:p></o:p>
//get localized Message string from resource bundle <o:p></o:p>
String localizedMessage = getBundleMessage(message);<o:p></o:p>
if (null != localizedMessage && "".equals(localizedMessage)) {<o:p></o:p>
throwNewFacesMessage(actionEvent.getComponent()<o:p></o:p>
.getClientId(facesContext), localizedMessage,<o:p></o:p>
FacesMessage.SEVERITY_ERROR);<o:p></o:p>
} else {<o:p></o:p>
throwNewFacesMessage(actionEvent.getComponent()<o:p></o:p>
.getClientId(facesContext), message,<o:p></o:p>
FacesMessage.SEVERITY_ERROR);<o:p></o:p>
}<o:p></o:p>
}// org.apache.myfaces.application.ActionListenerImpl
在上面的方法中拦截所有的Exception,并转化为FacesMessage,这样JSF会直接转向Render Phase,从而停止Application method的进一步处理,实现Exception的handler。<o:p></o:p>
其次,在页面上添加<h:messages></h:messages>标识,就可以显示所有的错误消息。<o:p></o:p>
再者,覆盖A4J.AJAX.onError,由于我们在系统中还采用了Richfaces,Richfaces在判断Ajax请求在服务器的处理出现错误后,会有一个默认的处理函数A4J.AJAX.onError。这样当服务器端发送500等Error Code时,就可以被客户端的Ajax感知,并添加处理:<o:p></o:p>
A4J.AJAX.onError = function(req,status,message) {
var report = "An error has occurred during the request,Message is: " + message;
if(Ext.MessageBox.show){
Ext.MessageBox.show({
title: 'Error Report',
msg: report,
width:400,
buttons: Ext.MessageBox.OK
});
}else{
alert(report);
}
<o:p> </o:p>
};<o:p></o:p>
第二种,非Ajax请求,跳转到错误页面。可以通过配置web.xml来实现:<o:p></o:p>
<error-page>
<exception-type>javax.faces.FacesException<!---->exception-type>
<location>/error.jsp<!---->location>
<!---->error-page>
<error-page>
<error-code>500<!---->error-code>
<location>/error.jsp<!---->location>
<!---->error-page><o:p></o:p>
这样,当产生错误时,就会转向这个页面。<o:p></o:p>
发表评论
-
IBM jsf row select
2009-07-09 19:09 1300http://www.ibm.com/developerwor ... -
jsf中使用Locale,显示本地化错误信息
2009-01-15 11:09 3384JSF 在转换和验证时都有可能会产生错误信息: 在使用标准转 ... -
JSF中制作双表尾
2008-11-21 21:42 1705最近,在项目中遇到一个制作表尾的问题,效果 如下: ... -
JSF1.2中 ValueExpression的用法
2008-05-22 23:20 4898在1.2之前,可以向下面一样使用ValueBinding: V ... -
Tomcat中如何打开Sun JSF RI 1.2中的日志
2008-05-16 00:50 3601为了更加清楚的了解JSF请求在每一个生命周期中的执行情况,我们 ... -
JSF环境配置(JDK6+Eclipse3.3+Tomcat 6.0+JSF1.2+JSTL1.1)
2008-04-25 23:14 7002第一步: 下载安装 JDK 6 Update 3 h ... -
不可不看,JSF1.2 changes
2008-03-31 17:04 4322变化还是挺多的,仔细看看,可以省掉很多郁闷的时间哦。The n ... -
JSTL 1.2 下载
2008-03-31 14:26 30752在网上找JSTL找了一会,不太好找,就放在这里一份了: 网络下 ... -
JSF 1.2中对以前JSF的修改
2008-03-31 11:00 1906Features that are unavailable ... -
JSF 各版本一览
2008-03-28 18:03 3511JSF started its journey from ve ... -
JSF 背景
2008-03-25 17:29 1782自从第一个web应用程序Struts于2001年6月发布开始, ... -
在Dreamwear中开发JSF
2008-03-09 22:49 2732可以在Dreamwear中安装JSF插件,然后利用Dreamw ... -
JSF中Exception的处理
2007-12-21 14:56 78目标: 解析错误信息,使用Globalization 来显示 ... -
Why JSF
2007-12-17 16:03 1295JavaServer Faces is extremely i ... -
源码讲解renderResponse和responseComplete的区别
2007-11-17 00:40 4486看源代码: responseComplete: ... -
JSF 源代码赏析之Lifecycle
2007-11-15 23:41 5940JSF的生命周期在JSF ... -
如何在Maven中配置Richfaces
2007-11-08 17:41 30081.首先到这个地方下载maven http://maven. ... -
JSF 标准 转换器&验证器 文档
2007-11-02 18:50 2269下面是两篇文档 http://www.ibm.com/deve ... -
JSF 源代码赏析之FacesServlet
2007-10-30 00:08 12577学习JSF 多日,现在开始看看源代码。 首先是FacesSer ... -
Websphere 上部署Richfaces 3.10 Demo
2007-10-18 14:03 2304Websphere上部署 richfaces的demo一直有问 ...
相关推荐
在IT行业中,JavaScript Server Faces(JSF)是一种用于构建企业级Web应用程序的Java框架,而Hibernate则是一个流行的Java对象关系映射(ORM)工具,它简化了数据库操作。本篇文章将详细探讨如何利用JSF与Hibernate...
Managed Bean是JSF应用程序中的业务逻辑容器,它负责处理用户输入和执行相关的操作。 ```xml ``` 这段代码创建了一个文件上传表单,其中`#{fileUploadBean.file}`引用了Managed Bean中的属性,用于存储上传的...
3. **编写Filter类**:实现 `Filter` 接口,并在 `doFilter` 方法中处理文件上传。 ```java import javax.servlet.*; import javax.servlet.http.*; import org.apache.commons.fileupload.FileItem; import ...
在上面的例子中,`adminAction`是一个托管Bean,它包含`logout`和`listException`等方法。这些方法的执行结果(通过`from-outcome`)可以决定页面的流向。如果在方法执行过程中发生错误,可以捕获异常并显示给用户,...
- **com.model.exception:** 存放异常处理类。 - **com.data.dao:** 存放DAO接口。 - **com.data.dao.impl:** 存放DAO实现。 5. **异常处理类:** - 创建异常处理类`UserException.java`: ```java public ...
4. **JSP内置对象**:JSP提供了九个内置对象,如`request`, `response`, `session`, `pageContext`, `out`, `exception`等,它们提供了对HTTP请求、响应、会话和异常处理的直接访问。 5. **EL(Expression Language...
8. **exception**: 用于捕获和处理异常。 9. **page**: 代表当前的JSP页面,类型为Servlet实例。 ### JSP标准动作标签 JSP 2.0引入了JSP标准动作(JSP Standard Tag Library,JSTL),以减少脚本的使用。常见的...
因此,文档提出了一种解决方案——在JSF框架中实现数据表控件的分页功能,以此减少服务器端资源消耗和网络传输数据量,提高客户端响应速度。 #### 三、JSF框架简介 ##### 1. JSF框架特点 - **组件为中心的UI构建*...
2. Java中的异常可以分为两种:checked exception和unchecked exception,checked exception需要在方法声明中throws,unchecked exception不需要。 3. Java中的finally块总是会被执行,哪怕try块中抛出异常也一样。 ...
而在JSP的三大主流架构——Struts、Spring MVC和JSF中,Struts是最早被广泛采用的MVC(Model-View-Controller)框架。本篇文章将详细阐述Struts在JSP系统中的应用及其重要性。 首先,理解Struts框架的核心概念是...
2. **通用异常处理(Exception Handling)**: 引入了声明式异常处理,允许在方法级别声明可抛出的异常,简化了异常处理代码。 3. **简化EJB(Enterprise JavaBeans)**: EJB 3.0是Java EE5的一部分,极大地简化了...
- 对于JSF(JavaServer Faces)应用,由于页面逻辑与后台Bean分离,需要在Bean中处理。例如,在JSF Bean中,你可以通过`FacesContext`获取当前请求的实例,然后将其转换为`HttpServletRequest`,再调用`...
在Struts的配置文件(struts-config.xml)中,我们需要定义对应的Action和ActionForward,以处理上传和显示图片的请求。 最后,前端页面(HTML/JSF/JSP等)需要包含用于上传图片的表单,以及显示图片的标签。例如,...
JSF是另一种Java Web开发框架,它也支持组件化开发,但提供了更丰富的UI组件和更强大的事件处理机制。相比JSP,JSF更加面向组件,但学习曲线相对较陡峭。 10. **JSP的最佳实践**: - 避免在JSP页面中编写过多的...
// 处理ExceptionType1 } catch (ExceptionType2 e2) { // 处理ExceptionType2 } finally { // 无论是否发生异常都会执行的代码 } ``` 3. **JSP动作**:主要有jsp:include、jsp:forward、jsp:param、jsp:...
在JSP中,可以利用JDBC进行数据库连接、执行SQL语句、处理结果集等操作。通过JSP的SQL标签库或者JavaBean,可以方便地实现数据库操作,并将结果展示在网页上。 第5章 JSP与JavaBean JavaBean是Java的一种组件模型,...
Struts是早期流行的Java Web框架之一,虽然现在有更多的框架可以选择,比如Spring MVC和JSF,但Struts依然是面试中考察候选人基础知识的一个重要点。 接着,文档中出现了Web服务相关的知识点。Web服务是一类基于...
其中两个重要的简化机制是注解(Annotations)和统一异常处理(Unified Exception Handling)。 **注解**是Java EE 5中的一个关键增强,它减少了XML配置文件的使用,使代码更加自我描述。通过注解,开发者可以直接...
Struts、JSF和Spring MVC都是MVC框架的例子,而Hibernate是一个ORM(对象关系映射)框架,主要用于处理数据库操作,不直接实现MVC,答案是B)Hibernate。 5. Struts集成:Struts与Spring结合时,通常通过配置`...