首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2012-12-26 
struts2交给spring管理之后表单提交的字段无法注入如题。这是提交页面:div aligncenter classregiste

struts2交给spring管理之后表单提交的字段无法注入
如题。
这是提交页面:


<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,关键代码就是这些了。
感激不尽!感激不尽!

[最优解释]
配置好像没问题;
你这里<form action="/course/studentRegisterAction" method="post">
是不是有问题啊?改成studentRegisterAction试试
[其他解释]
@Transactional
@Controller
这个都不用写的,在web.xml中配置好就行了
像这样:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>struts</filter-name>

<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<!--  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>    -->


<init-param>
<param-name>config</param-name>
<param-value>
struts-default.xml,struts-plugin.xml,config/struts/struts.xml
</param-value>
</init-param>
</filter>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
<!-- classpath:config/spring/applicationContext*.xml -->
classpath:config/spring/applicationContext.xml
</param-value>
</context-param>

<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


[其他解释]
sib是谁的属性?比如:Student实体有sid属性。
写一个Stuedent类,作为实体bean;
在Action中声明一个Student属性。提供get,set方法,就能自动封装数据了。
[其他解释]
你的代码都没问题。
试试这个
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
[其他解释]
没人能解决吗?
[其他解释]
applicationcontext.xml里没有为其配置相应的bean吧,就是你这里的sid.不过bean都是注入的对象,属性应该不可以。建议你把sid封装成对象的属性。
[其他解释]
引用:
applicationcontext.xml里没有为其配置相应的bean吧,就是你这里的sid.不过bean都是注入的对象,属性应该不可以。建议你把sid封装成对象的属性。


applicationContext.xml中没有配置其他bean了。你说把sid封装成一个对象这可以,但是我的数据都是页面提交上来的。spring也可以给某个对象注入属性值,这是可以的。我这儿全部是用的注解。
[其他解释]
你把applicationContext.xml的代码贴出来
[其他解释]
引用:
你把applicationContext.xml的代码贴出来


<?xml version="1.0" encoding="UTF-8"?>
<beansdefault-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>



[其他解释]
哦,不对,你在struts.xml中的Action配置是小写的,错了,类名要大写
[其他解释]
studentRegisterHandler 这里应该改为StudentRegisterHandler
[其他解释]
引用:
配置好像没问题;
你这里<form action="/course/studentRegisterAction" method="post">
是不是有问题啊?改成studentRegisterAction试试


提交成功了的。并且Action进行了处理。可就是这个字段为null.   表示快疯了。。。。
[其他解释]
引用:
studentRegisterHandler 这里应该改为StudentRegisterHandler

 - -!!!小写的。代表着struts去spring找相应的action实例,默认名为类名,并且开头字母小写。除非在@Controller( name = "xxxxxx")...
[其他解释]
帖子别沉了啊。望大神出现!!!
[其他解释]
<constant name="struts.objectFactory" value="spring"/>
这句话不需要加
struts默认的就是spring
[其他解释]
引用:
<constant name="struts.objectFactory" value="spring"/>
这句话不需要加
struts默认的就是spring

嗯,加了也没错啊。可是问题不在这儿啊。为什么提交的数据获取不到?还是觉得说这个action可以不拿给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中了。
这些都是基础。多多加油。
[其他解释]
新问题:我用spring管理struts,然后我去掉了spring的配置文件applicationContext.xml中关于JPA的配置以及事务配置,结果sid又有值了。疯了,我感觉是哪里冲突了。大神啊大神在哪里?
[其他解释]
引用:
@Transactional
@Controller
这个都不用写的,在web.xml中配置好就行了
像这样:
Plain Text code?1234567891011121314151617181920212223242526272829303132333435363738394041<?xml version="1.0" encoding="UTF-8"?>……


你这上面的配置不就是启动struts和spring吗?没见什么特别的啊。你还说事务都不加?什么啊。。。没明白
[其他解释]
studentRegisterHandler 这里应该改为StudentRegisterHandler 
[其他解释]
该回复于2012-11-16 22:28:55被管理员删除
[其他解释]
你的那个类的提交方式不是由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中的依赖的对象。
[其他解释]
引用:
你的那个类的提交方式不是由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>

[其他解释]
引用:
studentRegisterHandler 这里应该改为StudentRegisterHandler

默认是类名,并且开头字母小写。这相当于一个bean。。。。
[其他解释]
引用:
你的代码都没问题。
试试这个
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>

不行。其实这个常量没必要配置,因为从struts2.x的时候,记不清楚了,struts默认就是交给spring管理了,只要类路径下面有struts2-spring-plugin.jar这个jar包就自动装载。。写没写没关系。

热点排行