resexternalservice.java
来自「博克后台的开发,有很多使用的方法和例子可以提供给大家学习」· Java 代码 · 共 114 行
JAVA
114 行
/*
* Created on 2005-10-17
*
* 扩展ExternalService, 使其可带session状态管理的可选功能
*/
package com.emk.manage;
import java.io.IOException;
import javax.servlet.ServletException;
import org.apache.tapestry.ApplicationRuntimeException;
import org.apache.tapestry.IComponent;
import org.apache.tapestry.IExternalPage;
import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.StaleSessionException;
import org.apache.tapestry.Tapestry;
import org.apache.tapestry.engine.ExternalService;
import org.apache.tapestry.engine.IEngineServiceView;
import org.apache.tapestry.engine.ILink;
import org.apache.tapestry.request.ResponseOutputStream;
/**
* 扩展ExternalService, 使其可带session状态管理的可选功能
*
* @author 尹文锋
*
*/
public class ResExternalService extends ExternalService {
/**
* Encoded into URL if pageService was stateful.
*
**/
private static final String STATEFUL_ON = "1";
/**
* Encoded into URL if pageService was not stateful.
*
**/
private static final String STATEFUL_OFF = "0";
/* (non-Javadoc)
* @see org.apache.tapestry.engine.IEngineService#getLink(org.apache.tapestry.IRequestCycle, org.apache.tapestry.IComponent, java.lang.Object[])
*/
public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters) {
if (parameters == null || parameters.length <2)
throw new ApplicationRuntimeException(
Tapestry.format("service-requires-parameters", Tapestry.EXTERNAL_SERVICE));
String pageName = (String) parameters[0];
//String stateful = (String) parameters[1];
String stateful = parameters[1].toString();
String[] context = new String[] { pageName, stateful};
Object[] pageParameters = new Object[parameters.length - 2];
System.arraycopy(parameters, 2, pageParameters, 0, parameters.length - 2);
return constructLink(cycle, Tapestry.EXTERNAL_SERVICE, context, pageParameters, true);
}
/* (non-Javadoc)
* @see org.apache.tapestry.engine.IEngineService#service(org.apache.tapestry.engine.IEngineServiceView, org.apache.tapestry.IRequestCycle, org.apache.tapestry.request.ResponseOutputStream)
*/
public void service(IEngineServiceView engine, IRequestCycle cycle,
ResponseOutputStream output) throws ServletException, IOException {
IExternalPage page = null;
String[] context = getServiceContext(cycle.getRequestContext());
if (context == null || context.length != 2)
throw new ApplicationRuntimeException(
Tapestry.format("service-single-context-parameter", Tapestry.EXTERNAL_SERVICE));
String pageName = context[0];
String stateful = context[1];
//增加session管理检验,若页面需要session检验时就要判断, 是否存在session,若不存在则抛出session过期异常
if (stateful.equals(STATEFUL_ON)){
if (cycle.getRequestContext().getSession() == null || cycle.getRequestContext().getSession().isNew()){
IPage sessionPage = cycle.getPage("SessionException");
throw new StaleSessionException("SessionException", sessionPage);
}
}
//-------------------------------------------------------------
try
{
page = (IExternalPage) cycle.getPage(pageName);
}
catch (ClassCastException ex)
{
throw new ApplicationRuntimeException(
Tapestry.format("ExternalService.page-not-compatible", pageName),
ex);
}
Object[] parameters = getParameters(cycle);
cycle.setServiceParameters(parameters);
cycle.activate(page);
page.activateExternalPage(parameters, cycle);
// Render the response.
engine.renderResponse(cycle, output);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?