问题似乎已经解决了
function logout(){
if(confirm("确认关闭系统?")){
window.location.href="/application/logout.svc";
}
}
然后我写了一个logout service
package com.longcredit.KEye.app.business;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.engine.IEngineService;
import org.apache.tapestry.engine.ILink;
import org.apache.tapestry.services.CookieSource;
import org.apache.tapestry.services.LinkFactory;
import org.apache.tapestry.services.ServiceConstants;
public class LogoutService implements IEngineService {
private Log _log;
private HttpServletRequest _request;
private HttpServletResponse _response;
private LinkFactory _linkFactory;
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;
}
}
但是不是太理解 |