1、web.xml中的filter是有顺序的。将session的关闭放在加载完jsp页面后。
<!-- filter是有顺序的,要写在struts之前 -->
<!-- 配置filter 让session(load方法)在解析完jsp页面后,再关闭session -->
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、Action中的成员变量不受spring管理,受struts-spring-plugin的管理。 (也可让spring管理,见下5)
自动生成action 的bean(不需加注释也可生成)。
自动寻找spring容器中的bean是否有和成员变量一样的name(dafault),有的话自动注入(不需要加注释也可注入)。在set方法上加上@Resource(name="aaaaa")没用,要想控制名字,将注释加到属性上。
//@Component("register")
//@Scope("prototype") //设置多例
public class RegisterAction extends ActionSupport{
@Resource(name="aaaaaaaaa")
private UserService userService;
3、openSessionInView
自己创建事务的话一般不会出错。但当你没有设置事务时,会报错,无法执行写操作。
4、中文乱码问题
利用断层思维来解决,一段一段的测试,看到底是哪出错了。
可利用struts2 的i18n来设置。也可以利用spring的org.springframework.web.filter.CharacterEncodingFilter 在web.xml中的配置,来设置字符编码。
5、让struts.xml中的action的class为bean的name。不能省略所有的注释。
<action name="r" class="register">
<result name="success">/success.jsp</result>
<result name ="error">/false.jsp</result>
<result name="load">/load.jsp</result>
</action>
@Component("register")
@Scope("prototype") //设置多例
public class RegisterAction extends ActionSupport{
private UserService userService;