Tapestry的SeviceLink组件能调用9种基本的service(ActionService, AssetService, DirectService, EngineServiceInnerProxy, EngineServiceOuterProxy, ExternalService, HomeService, PageService, ResetService, RestartService)。如果这9种基本service不能满足需求,那可以使用自定义service来代替基本service,下面将讲述如何创建自定义service:
举例:有这样一个需求,要求用户对出的操作,会注销掉session中的数据,并且删除用户的cookie。
首先,新建立一个类,实现IEngineService接口。
public class LogoutService implements IEngineService {
/** @since 4.0 *hivemind注射基本服务/
private Log _log;
/** @since 4.0 *hivemind注射基本服务/
private HttpServletRequest _request;
/** @since 4.0 *hivemind注射基本服务/
private HttpServletResponse _response;
/** @since 4.0 *hivemind注射基本服务/
private LinkFactory _linkFactory;
/** @since 4.0 */
private String _servletPath;
@SuppressWarnings("unchecked")
public ILink getLink(boolean post, Object parameter)
{
//该服务允许带参数,所以屏蔽以下两句,若不允许带参数取消注释
// if (parameter != null)
// throw new IllegalArgumentException(EngineMessages.serviceNoParameter(this));
Map parameters = new HashMap();
//key必须为ServiceConstants所指定的key,否则会有异常
parameters.put(ServiceConstants.SERVICE, getName());
//其中parameter参数为,@ServiceLink组件的parameters
parameters.put(ServiceConstants.PARAMETER,parameter);
return _linkFactory.constructLink(this, post, parameters, true);
}
public void service(IRequestCycle cycle) throws IOException
{
String serviceName = cycle.getParameter(ServiceConstants.SERVICE);
System.out.println(serviceName);
HttpSession session = _request.getSession(false);
//注销清除cookie
CookieSource cookieSource=cycle.getInfrastructure().getCookieSource();
//获得@ServiceLink组件的parameters
Object[] obj=_linkFactory.extractListenerParameters(cycle);
for (Object object : obj) {
cookieSource.removeCookieValue((String)object);
}
if (session != null)
{
try
{
session.invalidate();
}
catch (IllegalStateException ex)
{
_log.warn("Exception thrown invalidating HttpSession.", ex);
// Otherwise, ignore it.
}
}
String url = cycle.getAbsoluteURL(_servletPath);
_response.sendRedirect(url);
}
//指定该service的名字
public String getName()
{
return "logout";
}
/** @since 4.0 */
public void setLog(Log log)
{
_log = log;
}
/** @since 4.0 */
public void setRequest(HttpServletRequest request)
{
_request = request;
}
/** @since 4.0 */
public void setResponse(HttpServletResponse response)
{
_response = response;
}
/** @since 4.0 */
public void setLinkFactory(LinkFactory linkFactory)
{
_linkFactory = linkFactory;
}
/** @since 4.0 */
public void setServletPath(String servletPath)
{
_servletPath = servletPath;
}
}
hivemind配置如下:
<service-point id="LogoutService" interface="org.apache.tapestry.engine.IEngineService">
<invoke-factory service-id="hivemind.BuilderFactory" model="singleton" >
<construct class="impl.FenixLogoutService" >
<set-service property="request" service-id="tapestry.globals.HttpServletRequest" />
<set-service property="response" service-id="tapestry.globals.HttpServletResponse" />
<set-object property="servletPath" value="app-property:org.apache.tapestry.servlet-path" />
<set-object property="linkFactory" value="infrastructure:linkFactory" />
</construct>
</invoke-factory>
</service-point>
<contribution configuration-id="tapestry.services.ApplicationServices">
<service name="logout" object="service:LogoutService"/>
</contribution>
使用就简单了:
<a jwcid="@ServiceLink" service="logout" parameters="ognl:cookieList">退出</a>
分享到:
相关推荐
自定义的邮件组件!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
一个关于table在tapestry里应用的例子
tapestry最基本jar包
资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...
Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...
Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...
本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在J2EE Web应用程序中应用Tapestry框架的...
3)自带验证,自定义验证,验证码的生成 4)Tree组件的使用,Grid的各种使用(修改样式,排序,隔行换色等等),Loop组件的使用 5)集合Spring4.0.5实现的增删改查 等等 如果你是新接触Tapestry框架的话,会对你有...
Tapestry 4 官方文档中文版本,现在中文资料比较少,和大家共享一下
Tapestry5.0.16文档和大家一起学习
tapestry 实例tapestry 实例tapestry 实例tapestry 实例
tapestry3开发指南,带tapestry3所有jar包
Tapestry4的雏形是Tapestry3.1,Tapestry的作者Howard,不光开发了Tapestry,还同时开发了一个轻量级框架Hivemind。所以Tapestry3.1的开发一开始就处于Hivemind框架之下。后来由于种种原因,Howard没有将Tapestry3.1...
tapestry5.2.6 最新jar包,Tapestry框架是一个位于java servlet容器和Tapestry应用程序之间的层
tapestry技术 Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是Java Web Component。Tapestry使得...
本文介绍Tapestry框架版本5。本文利用Tapestry 5开发一个简单的具有创建/读/更新/删除功能的应用,在创建这个应用的过程中,本文体会到Tapestry带来的开发效率的提升。从多方面来讲解 Tapestry应用,比如应用的...
Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是Java Web Component。Tapestry使得java代码与html...
包含: tapestry 的源代码, tapestry集成spring2.0 tapestry快速启动 tapestry upload tapestry hibernate tapestry annotations
强大的tapestry框架的学习入门资料,详细介绍了tapestry的常用开发文档。