struts2交给spring管理之后表单提交的字段无法注入

copaer 2012-11-16 10:54:33
如题。
这是提交页面:

<div align="center" class="register">
<form action="/course/studentRegisterAction" method="post">
<table class="register_table">
<caption>学生注册信息表单</caption>
<tbody>
<tr>
<td>学生学号:</td>
<td><input type="text" name="sid" required="required"/></td>
</tr>
<tr>
<td><button type="submit">提交</button></td>
<td><button type="reset">重置</button></td>
</tr>
</tbody>
</table>
</form>
</div>


下面是struts.xml

<constant name="struts.i18n.encoding" value="UTF-8"/>

<!-- 将struts交给spring进行管理 -->
<constant name="struts.objectFactory" value="spring"/>

<constant name="struts.devMode" value="true"/>
<constant name="struts.serve.static.browserCache" value="false"/>
<constant name="truts.action.extension" value="action,do"/>
<constant name="struts.configuration.xml.reload" value="true"/>

<!-- 设置目标缓存文件位置
<constant name="struts.multipart.saveDir" value="D:\\temp"/>
-->

<package name="org.course.action" extends="struts-default">
<action name="studentRegisterAction" class="studentRegisterHandler">
<result>/index.jsp</result>
</action>
</package>

接下来是我的Action

@Transactional
@Controller
public class StudentRegisterHandler extends ActionSupport {

private static final long serialVersionUID = -520L;
private String sid;
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
@Override
public String execute() throws Exception {
System.out.println(getSid());
return SUCCESS;
}
}

运行起来没有报错,就是Action中的sid值为null,struts2没有对sid注入值,如果我struts2不交给spring管理,也就是去掉Action头上的@Controller,以及去掉struts.xml中的<constant name="struts.objectFactory" value="spring"/> 那么就有值。真的不明白是怎么回事。按道理应该整合成功才对啊???
求大神帮忙解决,小弟初学整合ssh,关键代码就是这些了。
感激不尽!感激不尽!
...全文
419 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuqiaopeng 2014-11-25
  • 打赏
  • 举报
回复
楼主解决了吗?我也遇到这个问题啦,spring如何封装jsp传递的值啊?
copaer 2012-11-17
  • 打赏
  • 举报
回复
引用 21 楼 JasonSSH 的回复:
你的代码都没问题。 试试这个 <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
不行。其实这个常量没必要配置,因为从struts2.x的时候,记不清楚了,struts默认就是交给spring管理了,只要类路径下面有struts2-spring-plugin.jar这个jar包就自动装载。。写没写没关系。
copaer 2012-11-17
  • 打赏
  • 举报
回复
引用 22 楼 jiangmeiwei 的回复:
你的那个类的提交方式不是由Spring来管理了吗?http://package.qunar.com/guangzhou_%E5%8C%97%E4%BA%AC%2C%E9%95%BF%E5%9F%8E/NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NU……
是啊,我是这么写的啊。。

<package name="org.course.action" extends="struts-default">
      <action name="studentRegisterAction" class="studentRegisterHandler">
          <result>/index.jsp</result>
      </action>
  </package>
copaer 2012-11-17
  • 打赏
  • 举报
回复
引用 20 楼 fengzi2009F 的回复:
studentRegisterHandler 这里应该改为StudentRegisterHandler
默认是类名,并且开头字母小写。这相当于一个bean。。。。
copaer 2012-11-16
  • 打赏
  • 举报
回复
引用 8 楼 IT0918liu 的回复:
studentRegisterHandler 这里应该改为StudentRegisterHandler
- -!!!小写的。代表着struts去spring找相应的action实例,默认名为类名,并且开头字母小写。除非在@Controller( name = "xxxxxx")...
copaer 2012-11-16
  • 打赏
  • 举报
回复
引用 6 楼 IT0918liu 的回复:
配置好像没问题; 你这里<form action="/course/studentRegisterAction" method="post"> 是不是有问题啊?改成studentRegisterAction试试
提交成功了的。并且Action进行了处理。可就是这个字段为null. 表示快疯了。。。。
IT0918liu 2012-11-16
  • 打赏
  • 举报
回复
studentRegisterHandler 这里应该改为StudentRegisterHandler
IT0918liu 2012-11-16
  • 打赏
  • 举报
回复
哦,不对,你在struts.xml中的Action配置是小写的,错了,类名要大写
IT0918liu 2012-11-16
  • 打赏
  • 举报
回复
配置好像没问题; 你这里<form action="/course/studentRegisterAction" method="post"> 是不是有问题啊?改成studentRegisterAction试试
copaer 2012-11-16
  • 打赏
  • 举报
回复
引用 4 楼 IT0918liu 的回复:
你把applicationContext.xml的代码贴出来

<?xml version="1.0" encoding="UTF-8"?>
<beans	default-autowire="no"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.2.xsd">
	
	<context:component-scan base-package="org.course"/>
	<context:annotation-config/>
	
	<bean id="entityManagerFactory"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitName" value="course" />
	</bean>
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>
	<tx:annotation-driven transaction-manager="transactionManager"/>
	
</beans>
IT0918liu 2012-11-16
  • 打赏
  • 举报
回复
你把applicationContext.xml的代码贴出来
copaer 2012-11-16
  • 打赏
  • 举报
回复
引用 2 楼 chaugust02 的回复:
applicationcontext.xml里没有为其配置相应的bean吧,就是你这里的sid.不过bean都是注入的对象,属性应该不可以。建议你把sid封装成对象的属性。
applicationContext.xml中没有配置其他bean了。你说把sid封装成一个对象这可以,但是我的数据都是页面提交上来的。spring也可以给某个对象注入属性值,这是可以的。我这儿全部是用的注解。
x1n 2012-11-16
  • 打赏
  • 举报
回复
applicationcontext.xml里没有为其配置相应的bean吧,就是你这里的sid.不过bean都是注入的对象,属性应该不可以。建议你把sid封装成对象的属性。
jiangmeiwei 2012-11-16
  • 打赏
  • 举报
回复
你的那个类的提交方式不是由Spring来管理了吗?http://package.qunar.com/guangzhou_%E5%8C%97%E4%BA%AC%2C%E9%95%BF%E5%9F%8E/NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL_NULL?from=pk_sch_index&pageName=list&thispage=list&cCity=&planFrom=list&s1=desc&s2=asc&s3=asc&v=0那个Class里面的路径应该是你Spring中的依赖的对象。
NoTargetException 2012-11-16
  • 打赏
  • 举报
回复
你的代码都没问题。 试试这个 <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
copaer 2012-11-16
  • 打赏
  • 举报
回复
没人能解决吗?
  • 打赏
  • 举报
回复
studentRegisterHandler 这里应该改为StudentRegisterHandler
copaer 2012-11-16
  • 打赏
  • 举报
回复
新问题:我用spring管理struts,然后我去掉了spring的配置文件applicationContext.xml中关于JPA的配置以及事务配置,结果sid又有值了。疯了,我感觉是哪里冲突了。大神啊大神在哪里?
copaer 2012-11-16
  • 打赏
  • 举报
回复
引用 14 楼 wm5920 的回复:
@Transactional @Controller 这个都不用写的,在web.xml中配置好就行了 像这样: Plain Text code?1234567891011121314151617181920212223242526272829303132333435363738394041<?xml version="1.0" encoding="UTF-8"?>……
你这上面的配置不就是启动struts和spring吗?没见什么特别的啊。你还说事务都不加?什么啊。。。没明白
  • 打赏
  • 举报
回复
@Controller public class UserAction extends ActionSupport implements ModelDriven<User>{ private static final long serialVersionUID = 1L; User user=new User(); public User getModel() { return user; } 我一般是这样写的。struts2会自动封装id,name,password属性到user中了。 这些都是基础。多多加油。
加载更多回复(5)

81,092

社区成员

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

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