在velocity自定义标签中,如何获取request和session

发布于 2021-11-15 20:55:49 字数 206 浏览 879 评论 1

我现在自定一个directive,可以拿到一个context,但是貌似这个context中无法获取request。请问有没有办法获取这个request?

听说@红薯 是velocity大牛,特求帮助!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

英雄似剑 2021-11-16 09:34:34

详细代码如下:

package com.mugu.framework.web.view.velocity.directive;

import java.io.IOException;
import java.io.Writer;

import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.parser.node.Node;
import org.apache.velocity.tools.view.ViewToolContext;

public abstract class AbstractDirective extends Directive {
	
	@Override
	public boolean render(InternalContextAdapter internalContext, Writer writer,
			Node node) throws IOException, ResourceNotFoundException,
			ParseErrorException, MethodInvocationException {
		ViewToolContext context = (ViewToolContext)internalContext.getInternalUserContext();
		
		return doRender(internalContext, context, writer, node);
	}

	protected abstract boolean doRender(InternalContextAdapter internalContext,ViewToolContext context, Writer writer,
			Node node) throws IOException, ResourceNotFoundException,
			ParseErrorException, MethodInvocationException ;
}

我自己定义得指令是:

package com.mugu.framework.web.view.velocity.directive;

import java.io.IOException;
import java.io.Writer;

import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.parser.node.Node;
import org.apache.velocity.runtime.parser.node.SimpleNode;
import org.apache.velocity.tools.view.ViewToolContext;
import org.tuckey.web.filters.urlrewrite.UrlRewriteWrappedResponse;

public class UrlDirective extends AbstractDirective {

	@Override
	public String getName() {
		return "url";
	}

	@Override
	public int getType() {
		return LINE;
	}

	@Override
	protected boolean doRender(InternalContextAdapter internalContext,
			ViewToolContext context, Writer writer, Node node)
			throws IOException, ResourceNotFoundException, ParseErrorException,
			MethodInvocationException {
		// get url 
		SimpleNode sn = (SimpleNode) node.jjtGetChild(0);
		String url = (String)sn.value(internalContext);
		
		// get context path
		String contextPath = context.getRequest().getContextPath();
		if("/".equals(contextPath)){
			contextPath = "";
		}
		
		if(context.getResponse() instanceof UrlRewriteWrappedResponse){
			url = context.getResponse().encodeURL(url);
		}else{
			url = context + url;
		}
		
		writer.write(url);
		
		return true;
	}

}

 

 

 

 

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文