4、自定义拦截器annotation
拦截器开发出来,我们下一步就是要将拦截器配置到action上,于是开始寻找相关的注解来配置action,JBoss seam提供了@Interceptors允许开发人员来配置多个拦截器。很兴奋的就开始配置了,但是总是报错。打开源代码一看,@Interceptors上标注着@Target(ANNOTATION_TYPE),这个注解只能用在annotation上。在网上搜一搜,原来需要配置一个自定义注解,在自定义注解中配置拦截器。代码如下:
Java代码
1. @Target( { ElementType.TYPE, ElementType.METHOD })
2. @Retention(RetentionPolicy.RUNTIME)
3. @Interceptors(DefaultActionInterceptor.class)
4. public @interface DefaultActionProxy {
5.
6. }
然后将该自定义注解标注在要拦截的action或方法上。
Java代码
1. @Name("resourceRegisterAction")
2. @Scope(ScopeType.PAGE)
3. @DefaultActionProxy
4. public class ResourceRegisterAction{
5. }
这样拦截器就可以工作了。如果类中的某些方法不需要拦截,则只要加上@BypassInterceptors就好了。至今不明白为什么JBoss seam要采用这样的方式,而不是直接像EJB拦截器配置一样,直接在action上配置拦截器链。
5、在页面上显示弹出消息提示
在页面上,我们采用Richfaces和Ajax4Jsf的组件包(强烈建议使用JSF的应用引入这两个组件包),对于所有的时间操作,我们通过<a4j:status>这个标签监听状态。在执行的过程中,# {rich:component('wait')}.show()执行显示进度条。在进度条结束之后,我们将弹出相应的消息提示框,通过# {rich:component('popMsg')}.show()来显示出来。注意,在显示弹出框以后,我们要进行一定的判断,对于没有消息的情况,我们要自动把弹出框关闭。Js代码:onshow="if(!# {facesContext.externalContext.requestMap.containsKey('_pop')})#{rich:component('popMsg')}.hide();"
XML/HTML代码
1. <a4j:status onstart="#{rich:component('wait')}.show()"
2. onstop="#{rich:component('wait')}.hide();#{rich:component('popMsg')}.show();" />
3. <rich:modalPanel id="wait" width="200" height="120" moveable="false"
4. resizeable="false">
5. <f:facet name="header">
6. <h:outputText value="进度条" />
7. </f:facet>
8. <h:outputText value="正在操作请稍后....." />
9. </rich:modalPanel>
10. <rich:modalPanel id="popMsg" width="200" height="120" onshow="if(!#{facesContext.externalContext.requestMap.containsKey('_pop')})#{rich:component('popMsg')}.hide();">
11. <f:facet name="header">
12. <h:panelGroup>
13. <h:outputText
14. value="#{facesContext.externalContext.requestMap.get('_pop').header}">
15. </h:outputText>
16. </h:panelGroup>
17. </f:facet>
18. <f:facet name="controls">
19. <h:panelGroup>
20. <h:commandLink action="success" value="关闭" id="hidelink">
21. <f:actionListener
22. type="org.oecp.web.listener.RemovePopMsgListener" />
23. </h:commandLink>
24. <rich:componentControl for="popMsg" attachTo="hidelink"
25. operation="hide" event="onclick" />
26. </h:panelGroup>
27. </f:facet>
28. <h:outputText
29. value="#{facesContext.externalContext.requestMap.get('_pop').text}" />
30. </rich:modalPanel>
为什么我们要采用JSF上下文来存取消息提示而不是采用#{action.message.text}这样的形式呢?因为我们在构建这个消息提示体系的时候的思路就是要组件化和统一化,而不能和任何一个action绑死。利用JSF上下文,我们就可以实现manage bean无关话,这段页面代码就自然从各业务页面中分离出来,放在模板页中,被所有的页面加载。利用关闭按钮的监听器,我们就把消息删掉。
6、测试
页面代码片段:
XML/HTML代码
1. <rich:menuItem submitMode="ajax" value="新建根节点"
2. action="#{resourceRegisterAction.createParent}"
3. icon="/images/icons/create_doc.gif" reRender="info,popMsg">
4. </rich:menuItem>
注意:在reRender属性中,一定要有”popMsg”,这是消息提示数据响应区的ID
Action:
Java代码
1. public void createParent() throws BusinessEJBException {
2. try {
3. int i = 1 / 0;
4. } catch (Exception e) {
5. throw new BusinessEJBException("业务异常啦~~~");
6. }
7. }
效果:
- 大小: 12.3 KB
分享到:
相关推荐
- **拦截器**:掌握如何使用拦截器对请求进行预处理或后处理,增强应用的安全性和功能性。 - **集成测试**:学会编写集成测试来验证Seam应用的功能和性能。 #### 四、综合运用 **1. 结合JSF2与JBoss Seam** - **...
- **拦截器**:在 Seam 中,拦截器被用来增强组件的行为,如权限检查、日志记录等。 - **组件名字**:每个 Seam 组件都需要有一个唯一的名称,以便于引用和配置。 - **定义组件作用域**:通过配置文件或注解,可以...
- **事件与拦截器**:介绍Seam的事件驱动模型,以及如何利用拦截器扩展组件行为。 #### 4. 数据持久化与业务逻辑 - **实体与关系**:讨论Seam与JPA集成,实现数据持久化的方法。 - **服务层设计**:讲解如何设计和...
1.3. Seam 中的可点击列表:消息示例............................................................................................................................. 27 1.3.1. 理解代码.........................
Seam拦截器提供了一个统一的编程模型,能够将JSF、EJB、JPA等技术整合在一起,提供了一个强大且灵活的开发环境。 Seam异常处理 Seam异常处理是一个基于异常处理的编程模型,能够帮助开发者快速构建企业级应用程序...
### jboss-seam 注解详解 #### @Name 在JBoss Seam框架中,`@Name`注解主要用于定义一个Seam组件。为了确保组件能够被正确识别与使用,每个Seam组件都必须拥有一个唯一的名称标识,即通过`@Name`来指定。例如: `...
此外,Seam还支持CDI,这使得开发者可以利用更多的Java EE特性,如拦截器和异步处理。 总之,拥有《Seam In Action》、《JBoss Seam》和《官方中文指南》这些资源,开发者可以系统地学习和精通Seam框架,从而在企业...
2. **SEAM架构**:SEAM的架构分为多个层面,包括组件模型、领域模型、事件系统、拦截器和异常控制等。这些部分协同工作,构建了一个强大且灵活的框架。例如,组件模型允许开发者定义和管理应用的各个部分,而事件...
Seam 还支持 **拦截器** 的使用,可以用来增强组件的行为。 - **状态无关的 SessionBean**:通常用于处理那些不需要保持状态的业务逻辑。 - **状态相关的 SessionBean**:这类组件会保存与特定用户会话相关的状态...
- **拦截器**: 为组件提供额外的行为扩展点,如日志记录、安全性检查等。 - **组件命名规则**: 为了确保组件名称的唯一性和易于识别,Seam定义了一套规范化的命名机制。 ##### 组件范围定义 - **定义组件作用域**: ...
在本章节"JSF2.0实战 - 9、自定义Filter处理资源文件依赖关系"中,我们将深入探讨如何利用自定义过滤器(Filter)来优化和管理这些资源文件的依赖关系。 过滤器在Java web应用中扮演着关键角色,它们允许我们在HTTP...
Seam组件可以是无状态Session Bean、有状态Session Bean、实体Bean、JavaBeans、消息驱动Bean等,支持拦截器、多角色组件以及自定义作用域,为开发者提供了灵活的编程模型。 综上所述,Seam是一个强大的Java EE框架...
Seam注解主要分为几个类别:组件定义注解、生命周期管理注解、拦截器控制注解等。下面将详细介绍这些注解的具体用法及其应用场景。 #### 三、组件定义注解 组件定义注解主要用于定义Seam中的组件行为和属性。这些...
而Struts 2 Core 2.0.11.1则引入了更多的特性,如拦截器、自由标记库等,使其更加灵活和强大。 ### Ajax4jsf: JSF Ajax Ajax4jsf是JSF(JavaServer Faces)的一个扩展,它允许开发者在不重新加载整个页面的情况下...
3. **组件支持**:资源(Resources)和提供者(Providers)可以作为 Seam components(JavaBean 或 EJB),享受全面的 Seam 注入、生命周期和拦截器等功能。 4. **GZIP 压缩**:支持客户端和服务器端自动的 GZIP 解...
第17章 JBoss Seam简介 17.1 Java EE 5.0编程模型 17.1.1 JSF详解 17.1.2 EJB 3.0详解 17.1.3 用JSF和EJB 3.0编写Web应用程序 17.1.4 分析应用程序 17.2 用Seam改善应用程序 17.2.1 ...