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

📄 tagmodel.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:   TagModel.java

package org.apache.struts2.views.freemarker.tags;

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 freemarker.ext.beans.BeanModel;
import freemarker.template.*;
import java.io.IOException;
import java.io.Writer;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.components.Component;
import org.apache.struts2.dispatcher.Dispatcher;

// Referenced classes of package org.apache.struts2.views.freemarker.tags:
//			CallbackWriter

public abstract class TagModel
	implements TemplateTransformModel
{

	private static final Log LOG = LogFactory.getLog(org/apache/struts2/views/freemarker/tags/TagModel);
	protected ValueStack stack;
	protected HttpServletRequest req;
	protected HttpServletResponse res;

	public TagModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res)
	{
		this.stack = stack;
		this.req = req;
		this.res = res;
	}

	public Writer getWriter(Writer writer, Map params)
		throws TemplateModelException, IOException
	{
		Component bean = getBean();
		Container container = Dispatcher.getInstance().getConfigurationManager().getConfiguration().getContainer();
		container.inject(bean);
		Map unwrappedParameters = unwrapParameters(params);
		bean.copyParams(unwrappedParameters);
		return new CallbackWriter(bean, writer);
	}

	protected abstract Component getBean();

	protected Map unwrapParameters(Map params)
	{
		Map map = new HashMap(params.size());
		DefaultObjectWrapper objectWrapper = new DefaultObjectWrapper();
		Iterator iterator = params.entrySet().iterator();
		do
		{
			if (!iterator.hasNext())
				break;
			java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next();
			Object value = entry.getValue();
			if (value != null)
				if (value instanceof TemplateModel)
					try
					{
						map.put(entry.getKey(), objectWrapper.unwrap((TemplateModel)value));
					}
					catch (TemplateModelException e)
					{
						LOG.error((new StringBuilder()).append("failed to unwrap [").append(value).append("] it will be ignored").toString(), e);
					}
				else
					map.put(entry.getKey(), value.toString());
		} while (true);
		return map;
	}

	protected Map convertParams(Map params)
	{
		HashMap map = new HashMap(params.size());
		Iterator iterator = params.entrySet().iterator();
		do
		{
			if (!iterator.hasNext())
				break;
			java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next();
			Object value = entry.getValue();
			if (value != null && !complexType(value))
				map.put(entry.getKey(), value.toString());
		} while (true);
		return map;
	}

	protected Map getComplexParams(Map params)
	{
		HashMap map = new HashMap(params.size());
		Iterator iterator = params.entrySet().iterator();
		do
		{
			if (!iterator.hasNext())
				break;
			java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next();
			Object value = entry.getValue();
			if (value != null && complexType(value))
				if (value instanceof BeanModel)
					map.put(entry.getKey(), ((BeanModel)value).getWrappedObject());
				else
				if (value instanceof SimpleNumber)
					map.put(entry.getKey(), ((SimpleNumber)value).getAsNumber());
				else
				if (value instanceof SimpleSequence)
					try
					{
						map.put(entry.getKey(), ((SimpleSequence)value).toList());
					}
					catch (TemplateModelException e)
					{
						LOG.error("There was a problem converting a SimpleSequence to a list", e);
					}
		} while (true);
		return map;
	}

	protected boolean complexType(Object value)
	{
		return (value instanceof BeanModel) || (value instanceof SimpleNumber) || (value instanceof SimpleSequence);
	}

}

⌨️ 快捷键说明

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