本文来自 Spring In Action
以及在项目中的一些使用
其原理很简单,
在T的global对象中装入 Spring的 ApplicationContext.
所以我们首先要重写写应用的 Engine
因为 .application的 默认 Engine为 BaseEngine为以我们需要
写一个 新的 Engine用来装载 Spring的 WebApplicationContext
我的应用中名字为 IbEngine:
public
class
IbEngine
extends
BaseEngine
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//"appContext" 指 Spring ApplicationContext 在global 这个Map中的Key
public static final String APPLICATION_CONTEXT_KEY = "appContext";
/**
* @see org.apache.tapestry.engine.AbstractEngine#setupForRequest(org.apache.tapestry.request.RequestContext)
*/
//在setupForRequest这个方法中装载
protected void setupForRequest(RequestContext context) {
super.setupForRequest(context);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Map global = (Map) getGlobal();
ApplicationContext ac = (ApplicationContext) global
.get(APPLICATION_CONTEXT_KEY);
if(ac==null){
ac = WebApplicationContextUtils.getWebApplicationContext(context
.getServlet().getServletContext());
global.put(APPLICATION_CONTEXT_KEY, ac);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
然后在 .application中指定 应用的 Engine对象
<
application
name
="ibank"
engine-class
="com.ibank.tapestry.presentation.IbEngine"
>
接下来我们在 页面中调用 Spring分发的Bean
Home.Page
<
property-specification
name
="InfoService"
type
="com.ibank.spring.services.IbInfoService"
>
global.appContext.getBean("IbInfoService")
</
property-specification
>
其中 appContext 为我们在IbEngine中定义的的 ApplicationContext 的Key
其中 global.appContext.getBean("IbInfoService") 中ognl表达
相当于你在Home,java 中调用 this.getGlobal(),get(" appContext. ").getBean(" IbInfoService
")
如果在 component 中使用 ,有一点不同
Info.jwc
<
property-specification
name
="InfoService"
type
="com.ibank.spring.services.IbInfoService"
>
page.global.appContext.getBean("IbInfoService")
</
property-specification
>
因为 component被包含在page中
需要调用this.getPage().getGlobal().....
在程序中使用
Home.java
public
abstract
IbInfoService getInfoService();
public
abstract
void
setInfoService(IbInfoService InfoService);
public
List getInfoList()
{
infoList=new ArrayList();
infoList=getInfoService().getSimInfoList(1,Integer.parseInt(getInfoMount()));
return infoList;
}
完成了..
:)
以及在项目中的一些使用
其原理很简单,
在T的global对象中装入 Spring的 ApplicationContext.
所以我们首先要重写写应用的 Engine
因为 .application的 默认 Engine为 BaseEngine为以我们需要
写一个 新的 Engine用来装载 Spring的 WebApplicationContext
我的应用中名字为 IbEngine:
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
然后在 .application中指定 应用的 Engine对象
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
接下来我们在 页面中调用 Spring分发的Bean
Home.Page
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
其中 global.appContext.getBean("IbInfoService") 中ognl表达
相当于你在Home,java 中调用 this.getGlobal(),get(" appContext. ").getBean(" IbInfoService
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
如果在 component 中使用 ,有一点不同
Info.jwc
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
需要调用this.getPage().getGlobal().....
在程序中使用
Home.java
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
完成了..
:)