Seam采用的JSF作为表现层技术,但是标准的jsf有很多的不足之处。
1. JSF对POST方法的http request的依赖太强了,只有POST请求的数据才能直接绑定到后台的组件上,GET方法的则不可以。
2. 根据JSF的规范,当收到一个GET请求后,JSF走完RESTORE VIEW PHARSE 就会直接到RENDER RESPONSE PHARSE,而不会做INVOKE APPLICATION,所以GET方法的请求不能触发业务逻辑。
这些限定让JSF在某些方面不太方便,比如书签功能。因为浏览器的书签都是记下当前页的URL,而不会记下POST请求里的参数。SEAM虽然采用了JSF,但是加入了Page parameter 和 page action,弥补了JSF在这方面的缺陷。
Page parameter是将GET请求时的参数直接绑定到组件上的技术。Page action则是在生成页面之前调用业务逻辑的技术。这两者的配置都可以在WEB-INF/pages.xml或者 *.page.xml里完成。比如:
<page view-id="/calculator.jsp" action="#{calculator.calculate}">
<param name="x" value="#{calculator.lhs}"/>
<param name="y" value="#{calculator.rhs}"/>
<param name="op" converter="#{operatorConverter}" value="#{calculator.op}"/>
</page>
上 面的配置,会让用GET方法访问/calculator.jsp时的参数x, y, op分别绑定到calculator的lhs, rhs和op属性上,然后执行calculator的calculate()方法。如果你只需要在页面上传递参数,而并不需要绑定到某个组件上,只需要写成:
<page view-id="/calculator.jsp" >
<param name="result" />
</page>
这样以GET方法传来的名为result的参数将继续以result为名字在Page Scope内传递下去。
Page action 还可以按条件执行:
<page view-id="/calculator.jsp" >
<param name="x" value="#{calculator.lhs}"/>
<param name="y" value="#{calculator.rhs}"/>
<param name="op" converter="#{operatorConverter}" value="#{calculator.op}"/>
<action execute="#{calculator.calculate}" if="#{calculator.op != null}" />
</page>
除了在pages.xml, *.page.xml里配置,还可以用seam的组件s:link s:button来实现指定page action,例如:
<s:link view="/calculator.jsp" action="#{calculator.calculate}" ></s:link>
这 样,当这个链接被点击后,会引发一个对/calculator.jsp的GET请求,并且在生成/calculator.jsp页面之前执行 #{calculator.calculate} 方法。如果用普通的h:commandLink的话,则会提交表单,引发POST请求。
使用page action时要注意,在处理POST请求的时候,page action会在INVOKE APPLICATION PHARSE之后执行。
分享到:
相关推荐
Seam、JSF、RichFaces 和 Ajax4jsf 是四个重要的Java Web开发框架和技术,它们在构建现代、交互式Web应用程序中发挥着关键作用。让我们深入探讨这些技术及其结合使用时的知识点。 **1. Seam** Seam是一个开源的Java...
Ajax4jsf是一个基于JSF的Ajax扩展库,它增强了JSF的用户体验。主要特性包括: 1. **异步更新**:Ajax4jsf允许部分页面刷新,提高Web应用的响应速度。 2. **预定义组件**:提供了一系列预定义的Ajax组件,如滑块、...
Ajax4jsf是另一个增强JSF功能的库,专注于利用AJAX技术来提升用户界面的响应速度和交互性。它提供了预定义的AJAX行为和组件,使开发者无需深入了解底层AJAX技术就能实现异步更新。通过学习Ajax4jsf的常用标签讲解,...
具体来说,Seam对JSF生命周期进行了增强,主要包括以下几个方面: 1. **上下文状态管理**:Seam提供了更灵活的会话管理和组件状态保存机制,确保在复杂的交互场景下应用的状态得以正确维护。 2. **RESTful URL支持...
Seam通过这个监听器能够增强JSF的各个阶段,并引入CONVERSATION生命周期,这是Seam的一个核心特性。 ```xml <phase-listener>org.jboss.seam.jsf.SeamPhaseListener ``` 2. **seam.properties文件**:在...
- **IDE支持有限:**虽然有所改善,但相比Struts,JSF的IDE支持仍需加强。 - **验证框架:**JSF的内置验证机制在某些情况下可能不够完善。 - **客户端验证:**JSF对客户端的验证支持不够充分。 - **请求方法限制:**...
- **互补性**:JSF2提供了丰富的组件库和强大的视图管理功能,而Seam则加强了组件之间的交互和会话管理。两者的结合可以显著提升开发效率和应用质量。 - **最佳实践**:例如,在开发复杂的表单时,可以利用Seam的...
3. **事件驱动**:Seam的事件模型允许在组件之间传递消息,增强了组件间的通信能力。 4. **数据绑定**:Seam与JSF紧密集成,使得数据模型可以直接与用户界面元素进行双向绑定,简化了数据管理。 5. **安全性和事务...
JavaServer Faces (JSF) 是用于 Java™ Web 应用程序的第一个标准化的用户界面...Dan Allen 介绍了 Seam 对 JSF 生命周期的增强,包括上下文状态管理、 RESTful URL、Ajax remoting、适当的异常处理和约定优于配置。
Seam的强项在于其对JSF的增强,例如它提供的导航控制、自动数据绑定和转换等特性,使得JSF的应用开发更为便捷。 **J2EE(Java 2 Platform, Enterprise Edition)**是Java平台的企业版,用于开发和部署多层结构的、...
Seam 是一个强大的Java EE框架,它通过整合和强化Java EE 5的多个核心组件,如JSF(JavaServer Faces)和EJB 3.0,来提供一个统一且高效的开发体验。Seam的设计目标是简化Web应用的复杂性,特别是对于有状态的Web...
2. **JSF集成**:学习如何利用Seam增强JSF,实现更强大的用户界面交互。 3. **EJB 3.0集成**:探讨Seam如何简化EJB的使用,使业务逻辑处理更为简便。 4. **安全与身份验证**:了解Seam的安全特性,如身份验证、授权...
RichFaces是Seam中的一个增强JSF功能的库,提供了丰富的AJAX支持;JBoss是Red Hat公司开发的应用服务器,它支持并推荐使用Seam框架。 在实际开发中,开发者可以通过这些资源学习如何使用Seam进行组件注入、依赖管理...
**JBoss Seam简介** JBoss Seam 是一个开源的...通过学习《Improve and Expand JSF with Seam》,开发者可以更好地理解和掌握如何利用Seam框架增强JSF的功能,从而在企业级应用开发中实现更高的效率和更佳的用户体验。
1. **Faces Context增强**: 在Seam 2.0中,对JSF的Faces Context进行了扩展,提供了更多的上下文信息和操作。 2. **CDI支持**: 虽然Seam 2.0发布时,Contexts and Dependency Injection (CDI)规范还未正式发布,但...
Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................
Seam支持JSF标准,这意味着开发者可以直接使用JSF提供的丰富UI组件。此外,Seam还扩展了JSF的功能,提供了更多定制化和高级的组件,以满足复杂应用的需求。 ##### 2. 支持EJB 3.0但也可以独立于EJB 尽管Seam紧密...
为 JSF 量身定做的应用程序框架,JavaServer Faces (JSF) 是用于 Java™ Web 应用...Dan Allen 介绍了 Seam 对 JSF 生命周期的增强,包括上下文状态管理、 RESTful URL、Ajax remoting、适当的异常处理和约定优于配置。
5. **Seam与JSF的整合**:展示如何通过Seam实现JSF组件的扩展和增强,以及数据绑定和事件处理。 6. **Seam的其他特性**:如Infinispan缓存支持、FacesContext的扩展、国际化的处理等。 7. **实战例子**:提供具体的...