flower_0711 2009-04-11 20:29
浏览 226
已采纳

老板的奇怪想法

最近公司老板有一个想法,请大家一起讨论一下
老板想用SSH架构做基盘,在这个基础上封装一下.现在有这么一个功能
以前struts是这样做验证的,首先就是在struts.xml里配一下



然后就是validation.xml的内容,如下






</formset>


老板想这样多麻烦,他想把这个validation.xml的内容放到数据库里去,表的结构如下图
[img]/upload/attachment/93237/42e00b8f-0f33-39bd-ae5a-73cde3512153.bmp[/img]
功能还是要和以前STRUTS一样,表单提交里要先验证一下,但是这个validation.xml文件是没有的
要到数据库里去取。
这样的话就有多种实现,要么就改改org.apache.struts.validator.ValidatorPlugIn这个类,
要么就写这和这个类一样功能的类,但它原来是读validation.xml文件,现在是读数据库。
大家能否给点实现方式,最好是能贴上代码,谢谢了
[b]问题补充:[/b]
没办法,做员工的只能听老板的话,要么我就写一个类似于ValidatorPlugIn这样的类吧,代替原来的STRUTS验证,用SPRING的AOP可行吗?
[b]问题补充:[/b]
我打算改一下ValidatorPlugin相关类的源代码,我用的是struts2.1.6,我下载了源代码,我把它放到我的工程里面,但是现在报这个错:
2009-04-14 14:13:30,421 [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/sshdemo2]]-[ERROR] Exception starting filter struts2
Unable to load configuration. - bean - jar:file:/E:/apache-tomcat-5.5.17/webapps/sshdemo2/WEB-INF/lib/struts2-core-2.1.6.jar!/struts-default.xml:29:72
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:48)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:223)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:304)
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:77)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3600)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4193)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:904)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:867)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
Caused by: Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar:file:/E:/apache-tomcat-5.5.17/webapps/sshdemo2/WEB-INF/lib/struts2-core-2.1.6.jar!/struts-default.xml:29:72
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:222)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:165)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
... 31 more
Caused by: Bean type class com.opensymphony.xwork2.ObjectFactory with the name xwork has already been loaded by bean - file:/E:/apache-tomcat-5.5.17/webapps/sshdemo2/WEB-INF/classes/struts-default.xml:29:72 - bean - jar:file:/E:/apache-tomcat-5.5.17/webapps/sshdemo2/WEB-INF/lib/struts2-core-2.1.6.jar!/struts-default.xml:29:72
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:206)
... 34 more

说我找不到struts-default.xml这个文件,确实我下的源码里是没有这个文件,但我把这个文件放到SRC目录下了啊,为什么会报错?????
[b]问题补充:[/b]
我知道啊,我们公司用的是STRUTS2.1.6,这里面也有像1.X版本里的验证框架吧,
帮我看看吧,我现在有上面的异常
我把struts-default.xml放到WEB-INF/下面之后又报下面的异常
2009-04-14 14:30:44,453 [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/sshdemo2]]-[ERROR] Exception starting filter struts2
java.lang.RuntimeException: java.lang.RuntimeException: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='struts.objectFactory.spring.autoWire'] in public org.apache.struts2.spring.StrutsSpringObjectFactory(java.lang.String,java.lang.String,java.lang.String,javax.servlet.ServletContext).
at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:132)
at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:51)
at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:507)
at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:517)
at com.opensymphony.xwork2.inject.ContainerImpl$9.call(ContainerImpl.java:548)
at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:574)
at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:546)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:182)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:48)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:223)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:304)
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:77)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3600)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4193)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:904)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:867)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
Caused by: java.lang.RuntimeException: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='struts.objectFactory.spring.autoWire'] in public org.apache.struts2.spring.StrutsSpringObjectFactory(java.lang.String,java.lang.String,java.lang.String,javax.servlet.ServletContext).
at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:495)
at com.opensymphony.xwork2.inject.ContainerImpl$7.call(ContainerImpl.java:532)
at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:581)
at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:530)
at com.opensymphony.xwork2.config.impl.LocatableFactory.create(LocatableFactory.java:32)
at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:130)
... 39 more
Caused by: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='struts.objectFactory.spring.autoWire'] in public org.apache.struts2.spring.StrutsSpringObjectFactory(java.lang.String,java.lang.String,java.lang.String,javax.servlet.ServletContext).
at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.(ContainerImpl.java:345)
at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:305)
at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:304)
at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:150)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:76)
at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116)
at com.opensymphony.xwork2.inject.ContainerImpl.getConstructor(ContainerImpl.java:594)
at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:491)
... 44 more
Caused by: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='struts.objectFactory.spring.autoWire'] in public org.apache.struts2.spring.StrutsSpringObjectFactory(java.lang.String,java.lang.String,java.lang.String,javax.servlet.ServletContext).
at com.opensymphony.xwork2.inject.ContainerImpl.createParameterInjector(ContainerImpl.java:235)
at com.opensymphony.xwork2.inject.ContainerImpl.getParametersInjectors(ContainerImpl.java:225)
at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.constructParameterInjector(ContainerImpl.java:353)
at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.(ContainerImpl.java:337)
... 53 more
这是为什么啊?
[b]问题补充:[/b]

王者之剑你好
这个问题怎么解决啊
我肯定少了什么文件没加上去,但我不知道
我就是把STRUTS1.2.6的源码放到我的工程里了,然后删掉原来的struts2-core-2.1.6.jar这个包.

[b]问题补充:[/b]
STRUTS2.1.6源码,上面写错了
[b]问题补充:[/b]
对了还有,没替换这个包之前,我的项目是能跑通的
我的JAR包肯定都有的
只不过源码里没有struts-default.xml这个文件
我还少什么没加上?加在哪儿?
[b]问题补充:[/b]
嗯,改源码确实很难.
STRUTS2.1.6太复杂了,STRUTS1.3的话还可以考虑
大家说说,有什么解决方案吗?
给提供一下
[b]问题补充:[/b]
不会吧,我什么时候说过两个框架要一起用
哎~
能不能提点好的意见,真服了你
我打算用拦截器去做
在ACTION的方法调用前做一把处理
[b]问题补充:[/b]
兄弟,我没说我要一起用啊 大哥
我说的是STRUTS1.3的话,改STRUTS源码比较容易
但我现在用的是STRUTS2.1.6啊

我用拦截器差不多实现这个功能了
[b]问题补充:[/b]
嗯,现在你知道了
不过,你能不能提点好的建议啥的啊
不要只是路过啊

  • 写回答

15条回答 默认 最新

  • iteye_390 2009-04-14 17:19
    关注

    如果你用core-2.1.6.jar的时候能跑起来,那说明你源代码的编译路径有误,或者因为缺少某些包不能编译成功。

    src\org\apache
    struts的源码如果是放在这样的目录下,应该没问题,问题就是依赖的jar可能没加进来,编译没成功。
    你要看一下WEB-INF/classes里面是不是有编译好的文件。

    其实改个plugin没有必要这样兴师动众
    你把源代码包解开,然后将要改动的java文件复制到src里来,struts2-core-2.1.6.jar这个不动。
    因为class文件是先从WEB-INF/classes里找,再从WEB-INF/lib里找,所以并不会冲突。
    如果你实在担心,可以将类名改一下。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(14条)

报告相同问题?

悬赏问题

  • ¥15 有偿求码,CNN+LSTM实现单通道脑电信号EEG的睡眠分期评估
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路