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