将action交给spring管理,找不到action

hequan550 2012-03-19 01:27:31
由于用了@Resource方式注解,所以要将action交给spring管理。于是在sturts.xml文件中加入了
<constant name="struts.objectFactory" value="spring"/>这句话。
但访问action的时候一直报404错。求高手解答。谢谢!
...全文
248 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hequan550 2012-03-20
  • 打赏
  • 举报
回复
很感谢大家的帮助,我的问题解决了。
longx_ok 2012-03-19
  • 打赏
  • 举报
回复
你注解的名称@resource跟你类的@component注解名字对应吗?
cynthia111111 2012-03-19
  • 打赏
  • 举报
回复
另外,你的struts-spring-plugin加了吗
beiouwolf 2012-03-19
  • 打赏
  • 举报
回复
@Resource
private ISupplyUserService supplyUserService;

自己看看,你注解加哪儿了..

另外,你的struts-spring-plugin加了吗
小菜鸟的博客 2012-03-19
  • 打赏
  • 举报
回复
Action 加上
@Controller
@scope("prototype")
其余不变
hequan550 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 peng_hao1988 的回复:]

Ruesource只是将类交给spring管理(自负者类的状态和依赖关系的管理),并未放到web上下文中呀,需要在action类上使用如下的注解
(这是SpringMVC的配置)
Java code

@Controller
@RequestMapping("/mappingURL")
public class Test(){
@RequestMapping("/login")
……
[/Quote]

根据你说的做了,但是启动服务时报错:
2012-03-19 14:04:40,558 [org.apache.struts2.dispatcher.Dispatcher]-[ERROR] Dispatcher initialization failed
Unable to load configuration. - [unknown location]
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:371)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:415)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3693)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4340)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
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:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: Cannot locate the chosen ObjectFactory implementation: spring - [unknown location]
at org.apache.struts2.config.BeanSelectionProvider.alias(BeanSelectionProvider.java:293)
at org.apache.struts2.config.BeanSelectionProvider.alias(BeanSelectionProvider.java:264)
at org.apache.struts2.config.BeanSelectionProvider.register(BeanSelectionProvider.java:202)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:180)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
... 30 more
2012-3-19 14:04:40 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
Unable to load configuration. - [unknown location]
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:428)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3693)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4340)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
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:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: Unable to load configuration. - [unknown location]
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:371)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:415)
... 28 more
Caused by: Cannot locate the chosen ObjectFactory implementation: spring - [unknown location]
at org.apache.struts2.config.BeanSelectionProvider.alias(BeanSelectionProvider.java:293)
at org.apache.struts2.config.BeanSelectionProvider.alias(BeanSelectionProvider.java:264)
at org.apache.struts2.config.BeanSelectionProvider.register(BeanSelectionProvider.java:202)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:180)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
... 30 more
2012-3-19 14:04:40 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2012-3-19 14:04:40 org.apache.catalina.core.StandardContext start
严重: Context [] startup failed due to previous errors
2012-3-19 14:04:40 org.apache.catalina.core.ApplicationContext log
根正苗红 2012-03-19
  • 打赏
  • 举报
回复
楼主。首先你使用spring注入action. 那么struts与spring集成。那么sturts.xml找一个类,是需要从spring配置文件找到。 所以class="com.luckcart.suppliers.action.SuppliersLoginAction"
应该去找spring中注入action 的name
桃园闲人 2012-03-19
  • 打赏
  • 举报
回复
Ruesource只是将类交给spring管理(自负者类的状态和依赖关系的管理),并未放到web上下文中呀,需要在action类上使用如下的注解
(这是SpringMVC的配置)

@Controller
@RequestMapping("/mappingURL")
public class Test(){
@RequestMapping("/login")
public String doLogin(){
................
}
}

同上如果用Struts,也需要将action的映射配置到web上下文中去。
hequan550 2012-03-19
  • 打赏
  • 举报
回复
完整的sturts配置文件是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "dtds/struts-2.1.7.dtd">

<struts>
<include file="struts-default.xml" />

<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.action.extension" value="action" />
<constant name="struts.objectFactory" value="spring"/>
<constant name="struts.custom.i18n.resources" value="applicationResources" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.locale" value="zh_CN" /> <!-- en_US -->
<constant name="struts.devMode" value="true" /> <!-- true:表明处于开发状态,如果出错,会有详细的错误明细 -->
<constant name="struts.multipart.maxSize" value="1000000000" />

<package name="supply" extends="struts-default" namespace="/supply">
<action name="login" class="com.luckcart.suppliers.action.SuppliersLoginAction"
method="login">
<result name="success" type="freemarker">/WEB-INF/template/suppliers/login/login.ftl</result>
</action>
</package>

</struts>
hequan550 2012-03-19
  • 打赏
  • 举报
回复
这是action:
public class SuppliersLoginAction extends BaseAction{

private static final long serialVersionUID = 1L;

private String message;
private SupplyUser supplyUser = new SupplyUser();
private SupplyUser supplyUser0 = new SupplyUser();

@Resource
private ISupplyUserService supplyUserService;

/**
* 登录页
* @return
*/
public String login(){
return "success";
}

public SupplyUser getSupplyUser0() {
return supplyUser0;
}

public void setSupplyUser0(SupplyUser supplyUser0) {
this.supplyUser0 = supplyUser0;
}

public SupplyUser getModel() {
return supplyUser;
}

public SupplyUser getSupplyUser() {
return supplyUser;
}

public void setSupplyUser(SupplyUser supplyUser) {
this.supplyUser = supplyUser;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}
}

sturts配置:
<package name="supply" extends="struts-default" namespace="/supply">
<action name="login" class="com.luckcart.suppliers.action.SuppliersLoginAction" method="login">
<result name="success" type="freemarker">/WEB-INF/template/suppliers/login/login.ftl</result>
</action>
</package>
安特矮油 2012-03-19
  • 打赏
  • 举报
回复
那你struts的配置文件呢?
根正苗红 2012-03-19
  • 打赏
  • 举报
回复
把struts.xml 定义的action 和spring注入的action 代码贴出来呀。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧