⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractdirective.java

📁 struts 2 核心包 的源码 有错误是难免的
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   AbstractDirective.java

package org.apache.struts2.views.velocity.components;

import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationManager;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.util.ValueStack;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.components.Component;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.*;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.parser.node.Node;

public abstract class AbstractDirective extends Directive
{

	public AbstractDirective()
	{
	}

	public String getName()
	{
		return (new StringBuilder()).append("s").append(getBeanName()).toString();
	}

	public abstract String getBeanName();

	public int getType()
	{
		return 2;
	}

	protected abstract Component getBean(ValueStack valuestack, HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse);

	public boolean render(InternalContextAdapter ctx, Writer writer, Node node)
		throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException
	{
		ValueStack stack = (ValueStack)ctx.get("stack");
		HttpServletRequest req = (HttpServletRequest)stack.getContext().get("com.opensymphony.xwork2.dispatcher.HttpServletRequest");
		HttpServletResponse res = (HttpServletResponse)stack.getContext().get("com.opensymphony.xwork2.dispatcher.HttpServletResponse");
		Component bean = getBean(stack, req, res);
		Container container = Dispatcher.getInstance().getConfigurationManager().getConfiguration().getContainer();
		container.inject(bean);
		Map params = createPropertyMap(ctx, node);
		bean.copyParams(params);
		bean.start(writer);
		if (getType() == 1)
		{
			Node body = node.jjtGetChild(node.jjtGetNumChildren() - 1);
			body.render(ctx, writer);
		}
		bean.end(writer, "");
		return true;
	}

	protected Map createPropertyMap(InternalContextAdapter contextAdapter, Node node)
		throws ParseErrorException, MethodInvocationException
	{
		Map propertyMap = new HashMap();
		int children = node.jjtGetNumChildren();
		if (getType() == 1)
			children--;
		int index = 0;
		for (int length = children; index < length; index++)
			putProperty(propertyMap, contextAdapter, node.jjtGetChild(index));

		return propertyMap;
	}

	protected void putProperty(Map propertyMap, InternalContextAdapter contextAdapter, Node node)
		throws ParseErrorException, MethodInvocationException
	{
		String param = node.value(contextAdapter).toString();
		int idx = param.indexOf("=");
		if (idx != -1)
		{
			String property = param.substring(0, idx);
			String value = param.substring(idx + 1);
			propertyMap.put(property, value);
		} else
		{
			throw new ParseErrorException((new StringBuilder()).append("#").append(getName()).append(" arguments must include an assignment operator!  For example #tag( Component \"template=mytemplate\" ).  #tag( TextField \"mytemplate\" ) is illegal!").toString());
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -