📄 respageservice.java
字号:
/*
* Created on 2005-10-14
*
* 扩展PageService, 使其可带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.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.StaleSessionException;
import org.apache.tapestry.Tapestry;
import org.apache.tapestry.engine.IEngineServiceView;
import org.apache.tapestry.engine.ILink;
import org.apache.tapestry.engine.PageService;
import org.apache.tapestry.request.RequestContext;
import org.apache.tapestry.request.ResponseOutputStream;
/**
* 扩展PageService, 使其可带session状态管理的可选功能
*
* @author Administrator
*/
public class ResPageService extends PageService {
/**
* 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) {
// TODO Auto-generated method stub
if (Tapestry.size(parameters) != 1 && Tapestry.size(parameters) !=2){
// System.out.println("parameters==size====="+parameters.length);
throw new IllegalArgumentException(
Tapestry.format("service-single-parameter", Tapestry.PAGE_SERVICE));
}
String[] context =new String[1];
int i = 0;
//System.out.println("stateful==============="+(String) (cycle.getEngine().isStateful() ? STATEFUL_ON : STATEFUL_OFF));
//System.out.println("parameters==size====="+parameters.length);
String pageName =(String) parameters[0];
context[i++] = (String) parameters[0]; //pageName
if (Tapestry.size(parameters)==2){
String stateful =(String) parameters[1];
context[i++] = stateful;
}
return constructLink(cycle, Tapestry.PAGE_SERVICE, context, null, 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 {
RequestContext context = cycle.getRequestContext();
String[] serviceContext = getServiceContext(context);
if (Tapestry.size(serviceContext) != 1 && Tapestry.size(serviceContext) !=2){
//System.out.println("service==size====="+Tapestry.size(serviceContext));
throw new ApplicationRuntimeException(
Tapestry.format("service-single-parameter", Tapestry.PAGE_SERVICE));
}
String pageName = serviceContext[0];
if (Tapestry.size(serviceContext)==2){
String stateful = serviceContext[1];
//增加session管理检验,若页面需要session检验时就要判断, 是否存在session,若不存在则抛出session过期异常
if (stateful.equals(STATEFUL_ON)){
if (context.getSession() == null || context.getSession().isNew()){
IPage sessionPage = cycle.getPage("SessionException");
throw new StaleSessionException("SessionException", sessionPage);
}
}
}
// At one time, the page service required a session, but that is no longer necessary.
// Users can now bookmark pages within a Tapestry application. Pages
// can implement validate() and throw a PageRedirectException if they don't
// want to be accessed this way. For example, most applications have a concept
// of a "login" and have a few pages that don't require the user to be logged in,
// and other pages that do. The protected pages should redirect to a login page.
IPage page = cycle.getPage(pageName);
cycle.activate(page);
engine.renderResponse(cycle, output);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -