`
ajavafan2008
  • 浏览: 20306 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

Tapestry自定义基本IEngineService

 
阅读更多

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>

分享到:
评论

相关推荐

    tapestry5 自定义组件

    自定义的邮件组件!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    tapestry table

    一个关于table在tapestry里应用的例子

    tapestry最基本jar包

    tapestry最基本jar包

    深入浅出Tapestry

    资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...

    tapestry教程资料文档合集

    Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...

    tapestry5以上的帮助事例,帮助文档与spring衔接文档

    Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...

    深入浅出tapestry

    本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在J2EE Web应用程序中应用Tapestry框架的...

    Maven + Tapestry5.3.8 + Spring4.0.5 + Oracle10g

    3)自带验证,自定义验证,验证码的生成 4)Tree组件的使用,Grid的各种使用(修改样式,排序,隔行换色等等),Loop组件的使用 5)集合Spring4.0.5实现的增删改查 等等 如果你是新接触Tapestry框架的话,会对你有...

    tapestry官方中文文档

    Tapestry 4 官方文档中文版本,现在中文资料比较少,和大家共享一下

    Tapestry5.0.16_API文档

    Tapestry5.0.16文档和大家一起学习

    tapestry 实例

    tapestry 实例tapestry 实例tapestry 实例tapestry 实例

    tapestry3开发指南,带tapestry3所有jar包

    tapestry3开发指南,带tapestry3所有jar包

    Tapestry4开发指南

    Tapestry4的雏形是Tapestry3.1,Tapestry的作者Howard,不光开发了Tapestry,还同时开发了一个轻量级框架Hivemind。所以Tapestry3.1的开发一开始就处于Hivemind框架之下。后来由于种种原因,Howard没有将Tapestry3.1...

    tapestry5.2.6 jar包

    tapestry5.2.6 最新jar包,Tapestry框架是一个位于java servlet容器和Tapestry应用程序之间的层

    tapestry技术

    tapestry技术 Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是Java Web Component。Tapestry使得...

    Tapestry5最新中文入门实例教程

    本文介绍Tapestry框架版本5。本文利用Tapestry 5开发一个简单的具有创建/读/更新/删除功能的应用,在创建这个应用的过程中,本文体会到Tapestry带来的开发效率的提升。从多方面来讲解 Tapestry应用,比如应用的...

    Tapestry开发指南

    Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是Java Web Component。Tapestry使得java代码与html...

    tapestry-src-5.1.0.5.zip

    包含: tapestry 的源代码, tapestry集成spring2.0 tapestry快速启动 tapestry upload tapestry hibernate tapestry annotations

    tapestry学习入门资料

    强大的tapestry框架的学习入门资料,详细介绍了tapestry的常用开发文档。

Global site tag (gtag.js) - Google Analytics