📄 abstractdirective.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 + -