Struts2平时用的时候遗忘和新的知识点

来源:互联网 发布:卡特新秀赛季数据 编辑:程序博客网 时间:2024/06/05 23:53


1.

<s:iterator value="schoolBeautyOrHunks" var="user"> <s:property value="#user.email"/><!-- var这个别名,是将当前遍历对象以  user----当前对象  key---value形式存在于map栈 ,所以取值的时候要用#--></s:iterator>


2.<s:debug>这个标签在用的时候需要注意:如果采用了懒加载机制,此标签会导致出错,因为<s:debug>会将一个javabean里所有属性都加载出来显示在s:debug上,而此时懒加载了,s:debug就无法显示属性。


3.值桟的生命周期是一次requert,所以当多个action之间进行redirectAction(重定向)跳转,值桟里只有最后一个action的实例在栈顶。如果是chain跳转,那么经过几个action,值桟中就存在几个action。


4.<s:date name="publishTime" format="yyyy-MM-dd HH:mm:ss.SSS" />   struts2的这个日期标签是用来显示值的,而不是用于设置的,因为没文本框让你设值。

5.struts2中如果需要使用redirectAction跳转,而且希望在跳转的时候给action带几个参数,可以在跳转前的那个action将参数放到map栈中,在xml中用%{属性}或${属性}取值

注意:如果要传递多个参数给xml,那么url肯定需要用&进行分割,但是&在xml中关键字,需要进行转义&amp;否则的话struts2无法运行,访问项目一直404。

<action name="AdminActivityCheck_*" class="com.wah.activity.action.Activity_AdminCheckAction" method="{1}"><result name="checkUserJoinActivityAction" type="redirectAction">AdminActivity_checkUserJoinActivityUi.action?id=%{activityId}&a m p;name=%{name}</result></action>


6.struts2和ajax整合的时候,返回ajax数据返回的是action中所有get方法后第一个字母小写的属性,例如getName,就会返回name属性。但是,因为在action中,是注入了service的,如果用xml配置的方式,那么势必要生成service的get和set方法,这时,ajax会把service当作一个属性返回给ajax的,就会出错了。解决办法就是在service的get方法上加@JSON(serialize=false),让服务器不将这个属性作为json数据返回给客户端


7.在ajax和struts2结合的时候发现,返回类型为String的get方法都会在执行完指定方法后执行一遍。所以以下做法是很要命的,因为访问的url只是要执行showMenuitemById,而getAllMenuitem是自动执行的,两个方法中都用到了menuitemList全局变量,所以最后页面拿到的json数据是错误的。

正确的方法,就将那个get方法改为其他名字,例如show什么的。这样就不会去执行了。

public String getAllMenuitem(){this.menuitemList = menuitemService.getAllMenuitem();return SUCCESS;}public String showMenuitemById(){menuitemList = menuitemService.showMenuitemById(this.getModel().getPid());return SUCCESS;}

8.struts2和ajax结合的时候发现,当客户端发送请求后,服务器查询了hibernate一对多的一的这一方,然后发送json数据给客户端,此时就算web.xml中配置了OpenSessionInViewFilter,也会因为懒加载多的一方,因为session关闭问题而出异常。

这是为什么呢?

原因就是,由于服务器返回的是json对象,而不是一张页面数据,OpenSessionInViewFilter是不起作用的,所以获取在获取多的一方的时候session已经关闭了。

解决办法:让其忽略多的一方属性,这样多的一方就不会返回到客户端,也就不会因为客户端在一的一方取多的一方时,而出现session关闭的异常了。

如果返回的数据必须是多表的,那么在dao层就将三个表需要的数据查询出来。

public class Order{        private Set<User> users;        @JSON(serialize=false)//        private Set<User> getUsers(){                return users;        }}