FAQ:
seam的英文意思是:缝、接合处。seamless即“无缝地”。
1. Seam有什么价值?为什么要学习Seam?Seam本身有没有提供什么新技术?
A: 它通过把JSF与EJB3.0组件合并在一起,从而为开发基于Web的企业应用程序提供一个最新的模式。Seam可以让你把EJB组件直接绑定到 JSF 页面。Seam还可帮助你把jBPM流程定义直接地集成到你的应用程序中。
Seam目的是将各种框架“无缝地”整合。所以Seam本身也提供了一些类库特别是@annotation进行接合。
2. Seam提供了什么特性?
A: ①摆脱了对繁琐的JSF managed bean(JSF受管bean)的配置。
JSF页面中的基于event可以调用后台ManagedBean的指定方法,而Seam可以调用后台Seam组件的指定方法。例如action="#{register.register}"。
②将JSF与EJB 3.0整合
事实上,任何Java类都可以是一个Seam组件,这包括EJB组件类。而EJB组件可以交由EJB容器管理。
③集成AJAX——JBoss RichFaces和ICEfaces
④集成JBoss RichFaces和ICEfaces
3. 常用注解,如@Name,@Scope,@In,@Out
A:这些注解一般是在org.jboss.seam.annotations.*的package下。
@Name—— @Name("componentName") 为一个类定义一个Seam组件。所有Seam组件都需要该注解。
@Scope—— @Scope(ScopeType.CONVERSATION) 定义默认的组件上下文。
@In—— @In(value="contextVariableName") 在每次组件调用开始时从上下文中为此属性进行注入,value相当于指定beanName
@Out—— @Out(scope=ScopeType.SESSION) 在调用结束后注射出Seam组件属性到上下文变量。
例如可以对class EditCustomerAction的Customer customer字段表明:
@In(create=true)
@Out
Customer customer;
以及一些用于JSF的注解,例如:
@Converter——允许一个Seam组件作为JSF转换器(JSF Converter),必须实现javax.faces.convert.Converter接口。
@Validator——允许一个Seam组件作为JSF验证器(JSF Validator),必须实现javax.faces.validator.Validator接口。
以及@DataModel 等
4. Seam跟Spring的区别和结合
A:和Seam的双向注入(bijection)不同,Spring的注入并不是在方法调用时,而是发生在Spring Bean初始化时。
①可以在Spring的XML配置文件中,将Seam组件注入到Spring的Bean中去。
②在faces-config.xml中,加上
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
配置,就可以通过EL表达式在Seam组件中注入Spring的Bean。例如@In("#{bookingService}")
③将Spring Bean转换为Seam组件。通过<seam:component/>。
Seam涉及的jar包:
jboss-seam-*.jar
jboss-cache.jar
jboss-common-core.jar
jboss-deployers-client-spi.jar
jboss-deployers-core-spi.jar
jboss-el.jar
jboss-embedded-api.jar
richfaces-*.jar
drools-*.jar
jsf-*.jar
hibernate-*.jar
jbpm-jpdl.jar
ejb-api.jar
persistence-api.jar
其他常用的jar包