1. 通过EL表达式直接在页面中使用Spring Bean。(这一点称之为:SpringBean被当作LiteBean直接使用)
由于AOM是和Spring紧密集成的,因此,当我们要结合Spring使用的时候,只需要向工程中添加Spring 2.5的一些基本jar包,然后把operamasks-spring.jar这个jar添加到工程中就可以实现在xhtml或者jsp中通过EL表达式来访问Spring Bean。在该方式中,SpringBean可以被注入到LiteBean中。
package com.vv.aom.numbertest; import java.util.Random; public class NumberBean { private int num; public int getNum() { num = new Random().nextInt(10); return num; } public void setNum(int num) { this.num = num; } } |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" > <beans> <bean id="numberBean" class="com.vv.aom.numbertest.NumberBean"/> </beans> |
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:w="http://www.apusic.com/jsf/widget" xmlns:h="http://java.sun.com/jsf/html" xmlns:ajax="http://www.apusic.com/jsf/ajax" renderKitId="AJAX"> <h:form> <p>Generate a number between 0 to 10</p> <h:inputText value="#{numberBean.num}"/><br/> <h:outputText value="Generate" style="text-decoration:underline;cursor:pointer;"> <ajax:action event="onclick"/> </h:outputText> </h:form> </f:view> |
需要注意:如果你需要在页面中通过EL表达式直接使用LiteBean的时候,需要注意你的所有路径下不能出现两个及以上的同名LiteBean,否则系统会自动为你选择路径最短的一个LiteBean。所以仍然推荐使用OperaMask的IoVC来使用LiteBean。
2. 在AOM中定义的LiteBean都可以当作是Spring Bean被使用。 如果希望从Spring上下文中获得一个LiteBean,则必须在Spring配置文件中配置下面的Bean:
<bean class="org.operamasks.faces.spring.ManagedBeanConfigurer"/> |
上面的 org.operamasks.faces.spring.ManagedBeanConfigurer是 AOM 默认提供的一个 Spring Bean 定义,必须在Spring中配置此Bean,它的作用是:让 AOM 中的 LiteBean 同样能够被 Spring 所感应到。
如果你使用 Apusic 应用服务器,我们还建议你正确配置 Apusic 应用服务器的 TransactionManager:
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName"> <value>java:/TransactionManager</value> </property> </bean> |
这样,我们在AOM中定义的LiteBean既可以通过applicationContext.getBean(“”)方法来得到,也可以在Spring配置文件中使用LiteBean。
(1)通过spring的applicationContext的getBean方法得到LiteBean:
WebApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
NumberService mySpringBean = (NumberService) appContext.getBean("numberService");
out.print("The bean defined in Spring: " + mySpringBean);
out.print("<br/>");
Object myLiteBean = (Object) appContext.getBean("GenerateNumberBean");
out.print("The bean defined in AOM: " + myLiteBean); |
(2)通过spring-faces-config.xml配置文件使SpringBean和LiteBean协同工作,当然如果要指定该配置文件的个性化位置和名称,可以在web.xml中添加:
<context-param> <param-name>spring.faces.ConfiguarionFiles</param-name> <param-value>/WEB-INF/user-module.xml, /WEB-INF/role-module.xml</param-value> </context-param> |
之后在里面可以这样定义:(完全与Spring IOC的配置无异)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="compositeBeanAdvice" class="demo.spring.bean.CompositeBeanAdvice"/> <bean id="compositeBeanTarget" class="demo.spring.bean.CompositeBeanImpl" scope="session"> <property name="service" ref="numberService"/> <property name="numberBean" ref="GenerateNumberBean"/> </bean> <bean id="compositeBean" class="org.springframework.aop.framework.ProxyFactoryBean" scope="session"> <property name="proxyInterfaces" value="demo.spring.bean.CompositeBean"/> <property name="interceptorNames"> <list> <value>compositeBeanAdvice</value> </list> </property> <property name="target" ref="compositeBeanTarget"/> </bean> </beans> |
3. SpringBean在被当作LiteBean使用的时候,依然可以获得IoVC支持。这一点是通过在SpringBean中添加@Bind和@Action注解来实现的。例如:
SayHelloBean.java:
package com.vv.aom.numbertest;
import org.operamasks.faces.annotation.Action;
import org.operamasks.faces.annotation.Bind;
import org.operamasks.faces.annotation.ManagedBean;
//@ManagedBean
public class SayHelloBean {
@Bind
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Action
public String sayHello() {
System.out.println("hello " + name);
return null;
}
@Override
public String toString() {
return "MySpringBean";
}
} |
sayHello.xhtml
<f:view xmlns=http://www.w3.org/1999/xhtml xmlns:f="http://java.sun.com/jsf/core"
xmlns:w=http://www.apusic.com/jsf/widget
xmlns:layout="http://www.apusic.com/jsf/layout" renderKitId="AJAX"> <w:page title="spring"> <w:form> <layout:panelGrid columns="2"> <w:textField id="name"/> <w:button id="sayHello"/> </layout:panelGrid> </w:form> </w:page>
</f:view> |
Spring-bean.xml:
<bean id="SayHelloBean" class="com.vv.aom.numbertest.SayHelloBean">
<property name="name" value="Kevin"/>
</bean> |
文章来源:
http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!736.entry