Struts2 Struts 2中的自定义OgnlValueStack

Struts2 Struts 2中的自定义OgnlValueStack,struts2,valuestack,Struts2,Valuestack,我想通过扩展Struts 2.3.x的OgnlValueStack类,在我的应用程序中实现一个定制的ValueStack 请让我知道如何做到这一点。我需要在应用程序中扩展和实现哪些类,以及如何使用@inject注释注入不同的依赖项 更新 我已经按照前面的建议做了更改。我的ValueStackFactory实现是: package jp.co.spectrum.insight.core.mvc.factory; import java.util.Map; import java.util.Set

我想通过扩展Struts 2.3.x的
OgnlValueStack
类,在我的应用程序中实现一个定制的ValueStack

请让我知道如何做到这一点。我需要在应用程序中扩展和实现哪些类,以及如何使用@inject注释注入不同的依赖项

更新

我已经按照前面的建议做了更改。我的
ValueStackFactory
实现是:

package jp.co.spectrum.insight.core.mvc.factory;

import java.util.Map;
import java.util.Set;

import jp.co.spectrum.insight.core.datamodel.InsightValueStackImpl;
import ognl.MethodAccessor;
import ognl.OgnlRuntime;
import ognl.PropertyAccessor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.conversion.NullHandler;
import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.ognl.OgnlNullHandlerWrapper;
import com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.ValueStackFactory;

public class InsightValueStackFactory implements ValueStackFactory {
    @Inject
    private XWorkConverter xworkConverter;

    private CompoundRootAccessor compoundRootAccessor;

    @Inject("system")
    private TextProvider textProvider;

    @Inject
    private Container container;

    private boolean allowStaticMethodAccess;

    /*
    private static ValueStackFactory instance;

    public static ValueStackFactory getInstance() {
        if (instance == null) {
            instance = new InsightValueStackFactory();
        }
        return instance;
    }
    */

    private static ValueStackFactory factory = new InsightValueStackFactory();

    public static void setFactory(ValueStackFactory factoryParam) {
        factory = factoryParam;
    }

    public static ValueStackFactory getFactory() {
        return factory;
    }


    public void setXWorkConverter(XWorkConverter conv) {
        this.xworkConverter = conv;
    }

    public void setTextProvider(TextProvider textProvider) {
        this.textProvider = textProvider;
    }

    @Inject(value="allowStaticMethodAccess", required=true)
public void  setAllowStaticMethodAccess(String allowStaticMethodAccess) {
         this.allowStaticMethodAccess = "true".equalsIgnoreCase(allowStaticMethodAccess);
     }

     public ValueStack  createValueStack() {
         ValueStack stack = new InsightValueStackImpl(xworkConverter, compoundRootAccessor, textProvider, allowStaticMethodAccess);
         container.inject(stack);
         stack.getContext().put(ActionContext.CONTAINER, container);
         return stack;
     }
     public ValueStack createValueStack(ValueStack stack) {
         ValueStack result = new InsightValueStackImpl(stack, xworkConverter, compoundRootAccessor,  allowStaticMethodAccess);
         container.inject(result);
         stack.getContext().put(ActionContext.CONTAINER, container);
         return result;
     }


     public void  setContainer(Container container) throws ClassNotFoundException {
         Set<String> names = container.getInstanceNames(PropertyAccessor.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 if (Map.class.isAssignableFrom(cls)) {
                     PropertyAccessor acc = container.getInstance(PropertyAccessor.class, name);
                 }
                 OgnlRuntime.setPropertyAccessor(cls, container.getInstance(PropertyAccessor.class, name));
                 if (compoundRootAccessor == null && CompoundRoot.class.isAssignableFrom(cls)) {
                     compoundRootAccessor = (CompoundRootAccessor) container.getInstance(PropertyAccessor.class, name);
                 }
             }
         }
         names = container.getInstanceNames(MethodAccessor.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 OgnlRuntime.setMethodAccessor(cls, container.getInstance(MethodAccessor.class, name));
             }
         }
         names = container.getInstanceNames(NullHandler.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 OgnlRuntime.setNullHandler(cls, new OgnlNullHandlerWrapper(container.getInstance(NullHandler.class, name)));
             }
         }
         if (compoundRootAccessor == null) {
             throw new IllegalStateException("Couldn't find the compound root accessor");
         }
         this.container = container;
     }
}
package jp.co.spectrum.insight.core.mvc.factory;

import java.util.Map;
import java.util.Set;

import jp.co.spectrum.insight.core.datamodel.InsightValueStackImpl;
import ognl.MethodAccessor;
import ognl.OgnlRuntime;
import ognl.PropertyAccessor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.conversion.NullHandler;
import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.ognl.OgnlNullHandlerWrapper;
import com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.ValueStackFactory;


public class InsightValueStackFactory implements ValueStackFactory {
     @Inject
     private XWorkConverter xworkConverter ;
     private CompoundRootAccessor compoundRootAccessor  ;
     @Inject("system")
     private TextProvider textProvider ;
     @Inject
     private Container container;

     private boolean allowStaticMethodAccess;


      /*private static ValueStackFactory instance;
      public static ValueStackFactory getInstance(){
         if(instance==null){
             instance = new InsightValueStackFactory();
         }
         return instance;
     }*/

     private static ValueStackFactory factory = new InsightValueStackFactory();

     public static void setFactory(ValueStackFactory factoryParam) {
      factory = factoryParam;
     }

    public static ValueStackFactory getFactory() {
      return factory;
    }


     public void  setXWorkConverter(XWorkConverter conv) {
         this.xworkConverter = conv;

     }

     public void  setTextProvider(TextProvider textProvider) {
         this.textProvider = textProvider;
     }
     @Inject(value="allowStaticMethodAccess", required=true)
     public void  setAllowStaticMethodAccess(String allowStaticMethodAccess) {
         this.allowStaticMethodAccess = "true".equalsIgnoreCase(allowStaticMethodAccess);
     }

     public ValueStack  createValueStack() {
         ValueStack stack = new InsightValueStackImpl(xworkConverter, compoundRootAccessor, textProvider, allowStaticMethodAccess);
         container.inject(stack);
         stack.getContext().put(ActionContext.CONTAINER, container);
         return stack;
     }
     public ValueStack createValueStack(ValueStack stack) {
         ValueStack result = new InsightValueStackImpl(stack, xworkConverter, compoundRootAccessor,  allowStaticMethodAccess);
         container.inject(result);
         stack.getContext().put(ActionContext.CONTAINER, container);
         return result;
     }


     public void  setContainer(Container container) throws ClassNotFoundException {
         Set<String> names = container.getInstanceNames(PropertyAccessor.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 if (Map.class.isAssignableFrom(cls)) {
                     PropertyAccessor acc = container.getInstance(PropertyAccessor.class, name);
                 }
                 OgnlRuntime.setPropertyAccessor(cls, container.getInstance(PropertyAccessor.class, name));
                 if (compoundRootAccessor == null && CompoundRoot.class.isAssignableFrom(cls)) {
                     compoundRootAccessor = (CompoundRootAccessor) container.getInstance(PropertyAccessor.class, name);
                 }
             }
         }
         names = container.getInstanceNames(MethodAccessor.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 OgnlRuntime.setMethodAccessor(cls, container.getInstance(MethodAccessor.class, name));
             }
         }
         names = container.getInstanceNames(NullHandler.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 OgnlRuntime.setNullHandler(cls, new OgnlNullHandlerWrapper(container.getInstance(NullHandler.class, name)));
             }
         }
         if (compoundRootAccessor == null) {
             throw new IllegalStateException("Couldn't find the compound root accessor");
         }
         this.container = container;
     }
}
这是因为XWorkConverter实例为空

请告诉我为什么没有注射

提前谢谢

谢谢


我已经按照前面的建议做了更改。 我的
ValueStackFactory
实现是:

package jp.co.spectrum.insight.core.mvc.factory;

import java.util.Map;
import java.util.Set;

import jp.co.spectrum.insight.core.datamodel.InsightValueStackImpl;
import ognl.MethodAccessor;
import ognl.OgnlRuntime;
import ognl.PropertyAccessor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.conversion.NullHandler;
import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.ognl.OgnlNullHandlerWrapper;
import com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.ValueStackFactory;

public class InsightValueStackFactory implements ValueStackFactory {
    @Inject
    private XWorkConverter xworkConverter;

    private CompoundRootAccessor compoundRootAccessor;

    @Inject("system")
    private TextProvider textProvider;

    @Inject
    private Container container;

    private boolean allowStaticMethodAccess;

    /*
    private static ValueStackFactory instance;

    public static ValueStackFactory getInstance() {
        if (instance == null) {
            instance = new InsightValueStackFactory();
        }
        return instance;
    }
    */

    private static ValueStackFactory factory = new InsightValueStackFactory();

    public static void setFactory(ValueStackFactory factoryParam) {
        factory = factoryParam;
    }

    public static ValueStackFactory getFactory() {
        return factory;
    }


    public void setXWorkConverter(XWorkConverter conv) {
        this.xworkConverter = conv;
    }

    public void setTextProvider(TextProvider textProvider) {
        this.textProvider = textProvider;
    }

    @Inject(value="allowStaticMethodAccess", required=true)
public void  setAllowStaticMethodAccess(String allowStaticMethodAccess) {
         this.allowStaticMethodAccess = "true".equalsIgnoreCase(allowStaticMethodAccess);
     }

     public ValueStack  createValueStack() {
         ValueStack stack = new InsightValueStackImpl(xworkConverter, compoundRootAccessor, textProvider, allowStaticMethodAccess);
         container.inject(stack);
         stack.getContext().put(ActionContext.CONTAINER, container);
         return stack;
     }
     public ValueStack createValueStack(ValueStack stack) {
         ValueStack result = new InsightValueStackImpl(stack, xworkConverter, compoundRootAccessor,  allowStaticMethodAccess);
         container.inject(result);
         stack.getContext().put(ActionContext.CONTAINER, container);
         return result;
     }


     public void  setContainer(Container container) throws ClassNotFoundException {
         Set<String> names = container.getInstanceNames(PropertyAccessor.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 if (Map.class.isAssignableFrom(cls)) {
                     PropertyAccessor acc = container.getInstance(PropertyAccessor.class, name);
                 }
                 OgnlRuntime.setPropertyAccessor(cls, container.getInstance(PropertyAccessor.class, name));
                 if (compoundRootAccessor == null && CompoundRoot.class.isAssignableFrom(cls)) {
                     compoundRootAccessor = (CompoundRootAccessor) container.getInstance(PropertyAccessor.class, name);
                 }
             }
         }
         names = container.getInstanceNames(MethodAccessor.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 OgnlRuntime.setMethodAccessor(cls, container.getInstance(MethodAccessor.class, name));
             }
         }
         names = container.getInstanceNames(NullHandler.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 OgnlRuntime.setNullHandler(cls, new OgnlNullHandlerWrapper(container.getInstance(NullHandler.class, name)));
             }
         }
         if (compoundRootAccessor == null) {
             throw new IllegalStateException("Couldn't find the compound root accessor");
         }
         this.container = container;
     }
}
package jp.co.spectrum.insight.core.mvc.factory;

import java.util.Map;
import java.util.Set;

import jp.co.spectrum.insight.core.datamodel.InsightValueStackImpl;
import ognl.MethodAccessor;
import ognl.OgnlRuntime;
import ognl.PropertyAccessor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.conversion.NullHandler;
import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.ognl.OgnlNullHandlerWrapper;
import com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.ValueStackFactory;


public class InsightValueStackFactory implements ValueStackFactory {
     @Inject
     private XWorkConverter xworkConverter ;
     private CompoundRootAccessor compoundRootAccessor  ;
     @Inject("system")
     private TextProvider textProvider ;
     @Inject
     private Container container;

     private boolean allowStaticMethodAccess;


      /*private static ValueStackFactory instance;
      public static ValueStackFactory getInstance(){
         if(instance==null){
             instance = new InsightValueStackFactory();
         }
         return instance;
     }*/

     private static ValueStackFactory factory = new InsightValueStackFactory();

     public static void setFactory(ValueStackFactory factoryParam) {
      factory = factoryParam;
     }

    public static ValueStackFactory getFactory() {
      return factory;
    }


     public void  setXWorkConverter(XWorkConverter conv) {
         this.xworkConverter = conv;

     }

     public void  setTextProvider(TextProvider textProvider) {
         this.textProvider = textProvider;
     }
     @Inject(value="allowStaticMethodAccess", required=true)
     public void  setAllowStaticMethodAccess(String allowStaticMethodAccess) {
         this.allowStaticMethodAccess = "true".equalsIgnoreCase(allowStaticMethodAccess);
     }

     public ValueStack  createValueStack() {
         ValueStack stack = new InsightValueStackImpl(xworkConverter, compoundRootAccessor, textProvider, allowStaticMethodAccess);
         container.inject(stack);
         stack.getContext().put(ActionContext.CONTAINER, container);
         return stack;
     }
     public ValueStack createValueStack(ValueStack stack) {
         ValueStack result = new InsightValueStackImpl(stack, xworkConverter, compoundRootAccessor,  allowStaticMethodAccess);
         container.inject(result);
         stack.getContext().put(ActionContext.CONTAINER, container);
         return result;
     }


     public void  setContainer(Container container) throws ClassNotFoundException {
         Set<String> names = container.getInstanceNames(PropertyAccessor.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 if (Map.class.isAssignableFrom(cls)) {
                     PropertyAccessor acc = container.getInstance(PropertyAccessor.class, name);
                 }
                 OgnlRuntime.setPropertyAccessor(cls, container.getInstance(PropertyAccessor.class, name));
                 if (compoundRootAccessor == null && CompoundRoot.class.isAssignableFrom(cls)) {
                     compoundRootAccessor = (CompoundRootAccessor) container.getInstance(PropertyAccessor.class, name);
                 }
             }
         }
         names = container.getInstanceNames(MethodAccessor.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 OgnlRuntime.setMethodAccessor(cls, container.getInstance(MethodAccessor.class, name));
             }
         }
         names = container.getInstanceNames(NullHandler.class);
         for (String name : names) {
             Class cls = Class.forName(name);
             if (cls != null) {
                 OgnlRuntime.setNullHandler(cls, new OgnlNullHandlerWrapper(container.getInstance(NullHandler.class, name)));
             }
         }
         if (compoundRootAccessor == null) {
             throw new IllegalStateException("Couldn't find the compound root accessor");
         }
         this.container = container;
     }
}
包jp.co.spectrum.insight.core.mvc.factory;
导入java.util.Map;
导入java.util.Set;
导入jp.co.spectrum.insight.core.datamodel.InsightValueStackImpl;
导入ognl.MethodAccessor;
导入ognl.OgnlRuntime;
导入ognl.PropertyAccessor;
导入com.opensymphony.xwork2.ActionContext;
导入com.opensymphony.xwork2.TextProvider;
导入com.opensymphony.xwork2.conversion.NullHandler;
导入com.opensymphony.xwork2.conversion.impl.XWorkConverter;
导入com.opensymphony.xwork2.inject.Container;
导入com.opensymphony.xwork2.inject.inject;
导入com.opensymphony.xwork2.ognl.OgnlNullHandlerWrapper;
导入com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;
导入com.opensymphony.xwork2.util.CompoundRoot;
导入com.opensymphony.xwork2.util.ValueStack;
导入com.opensymphony.xwork2.util.ValueStackFactory;
公共类InsightValueStackFactory实现ValueStackFactory{
@注入
专用XWorkConverter XWorkConverter;
专用CompoundRootAccessor CompoundRootAccessor;
@注入(“系统”)
私人文本提供者;
@注入
私人货柜;
私有布尔allowStaticMethodAccess;
/*私有静态工厂实例;
公共静态值StackFactory getInstance(){
if(实例==null){
实例=新的InsightValueStackFactory();
}
返回实例;
}*/
私有静态ValueStackFactory=new InsightValueStackFactory();
公共静态无效设置工厂(ValueStackFactory factoryParam){
工厂=工厂参数;
}
公共静态值StackFactory getFactory(){
返回工厂;
}
公共无效设置XWorkConverter(XWorkConverter conv){
this.xworkConverter=conv;
}
public void setTextProvider(TextProvider TextProvider){
this.textProvider=textProvider;
}
@注入(value=“allowStaticMethodAccess”,必需=true)
public void setAllowStaticMethodAccess(字符串allowStaticMethodAccess){
this.allowStaticMethodAccess=“true”。equalsIgnoreCase(allowStaticMethodAccess);
}
public ValueStack createValueStack(){
ValueStack stack=new InsightValueStackImpl(xworkConverter、compoundRootAccessor、textProvider、allowStaticMethodAccess);
容器。注入(堆叠);
stack.getContext().put(ActionContext.CONTAINER,CONTAINER);
返回栈;
}
公共价值堆栈createValueStack(ValueStack堆栈){
ValueStack结果=新的InsightValueStackImpl(堆栈、xworkConverter、compoundRootAccessor、allowStaticMethodAccess);
容器。注入(结果);
stack.getContext().put(ActionContext.CONTAINER,CONTAINER);
返回结果;
}
公共void setContainer(容器容器)引发ClassNotFoundException{
集合名称=container.getInstanceNames(PropertyAccessor.class);
for(字符串名称:名称){
Class cls=Class.forName(名称);
如果(cls!=null){
if(Map.class.isAssignableFrom(cls)){
PropertyAccessor acc=container.getInstance(PropertyAccessor.class,名称);
}
OgnlRuntime.setPropertyAccessor(cls,container.getInstance(PropertyAccessor.class,name));
if(compoundRootAccessor==null&&CompoundRoot.class.isAssignableFrom(cls)){
compoundRootAccessor=(compoundRootAccessor)container.getInstance(PropertyAccessor.class,name);
}
}
}
名称=container.getInstanceNames(MethodAccessor.class);
for(字符串名称:名称){
Class cls=Class.forName(名称);
如果(cls!=null){
OgnlRuntime.setMethodAccessor(cls,container.getInstance(MethodAccessor.class,name));
}
}
name=container.getInstanceNames(NullHandler.class);
for(字符串名称:名称){
Class cls=Class.forName(名称);
如果(cls!=null){
setNullHandler(cls,新的OgnlNullHandlerWrapper(container.getInstance(NullHandler.class,name));
}
}
if(compoundRootAccessor==null){
抛出新的IllegalStateException(“找不到复合根访问器”);
}
this.container=容器;
}
}
InsightValueStackImpl
类是我定制的ValueStack,它扩展了
OgnlValueStack

按照前面的建议进行更改后,当我启动应用程序时,会出现以下错误:

java.lang.IllegalArgumentException: Wrapped type converter cannot be null
    at com.opensymphony.xwork2.ognl.OgnlTypeConverterWrapper.<init>(OgnlTypeConverterWrapper.java:32)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setRoot(OgnlValueStack.java:88)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.<init>(OgnlValueStack.java:71)
    at jp.co.spectrum.insight.core.datamodel.InsightValueStackImpl.<init>(InsightValueStackImpl.java:86)
    at jp.co.spectrum.insight.core.mvc.factory.InsightValueStackFactory.createValueStack(InsightValueStackFactory.java:85)
    at jp.co.spectrum.insight.core.mvc.dispatcher.InsightFilterDispatcher.<init>(InsightFilterDispatcher.java:118)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:355)
    at java.lang.Class.newInstance(Class.java:308)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)   
java.lang.IllegalArgumentException:包装类型转换器不能为null 在com.opensymphony.xwork2.ognl.ognltypeconverterrapper.(ognltypeconverterrapper.java:32) 位于com.opensymphony.xwork2.ognl.OgnlValueStack.setRoot(OgnlValueStack.java:88) 在com.opensymphony.xwork2.ognl.OgnlValueStack.(OgnlValueStack.java:71) 在jp.co.spectrum.insight.core.datamodel.InsightValueStackImpl。(InsightValueStackImpl.java:86) 位于jp.co.spectrum.insight.core.mvc.factory.InsightValueStackFactory.createValueStack(InsightValueStackFactory.java:85) 在jp.co.spectrum.insight.core.mvc.di