日期:2014-05-19  浏览次数:20571 次

关于Struts2的问题,各位大侠请进
最经项目遇到个问题,就是关于Struts2的数据填充到JSP页面上的问题。

在系统登录后,根据具体需要,要从数据库中获得数据LIST,然后填充到JSP中。

1.这种情况我以前的做法是在JSP页面中加入Java代码,获得相应的数据然后填充到JSP中,这样做不是很好地JSP和Java代码分离。

2.就是在登录后,就将需要获得的数据全部取出来,但是这样效率就成问题了(一次性加载数据太多,肯定反应就很慢),这种方法就不可取了。

3.我想的是只是在选择相应链接的时候,才执行相应的Action从后台取出数据,填充到JSP中。但是这种方法STRUTS2不知道怎么实现。(也就是说,在访问JSP时,能够同时执行Action取数据,并且JSP能够将数据呈现出来)
可以用<s:action>标签到JSP中,但是这个标签执行后的结果并不能及时地反应到JSP中,只能通过两个页面跳转才能将Action取得数据的值获取到JSP中。

请各位大侠不吝赐教。

------解决方案--------------------
访问JSP时候,先到Action,放到Session中,在跳到相应的Jsp
或者在OnLoad的时候,用JS调用Ajax,填充数据。。。不知道是否满足你的需求啊。。。
------解决方案--------------------
第1个问题是肯定的。
第2个问题,性能肯定有牺牲,提取数据,显示时再循环,多了一个循环,但数据集不大时影响不明显,数据集大时一般要分页,用户一般不可能去读完一个完整的大数据集,这就要求做强查询。在开发效率和运行效率上应有一个折中。
第3个问题,struts对get或post方法处理方法是一样的,所以应当访问一个action而不是jsp,在struts中jsp作用主要是视图。通过链接访问http://localhost:8080/test/login.action?user.name=admin&user.password=1234与通过表单登录结果的处理是相同的。
------解决方案--------------------
在你的action类中实现这个接口implements ServletRequestAware,
添加这个属性private HttpServletRequest request,
重写getter方法
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = this.request.getSession();
}
然后把你取出的list放到request里
this.request.setAttribute(“mylist”,。。。
在jsp里就能这么拿了
<s:property value="#request.mylist" />
------解决方案--------------------
1、jsp页面嵌入java代码确实已经不合适了,如果可以,定义自定义标签很不错,尤其是具有通用性的,例如分页等功能。
2、登陆后去除全部数据很不开合理,尤其是用Hibernate,如果用lazy=“false”会把所有关联表都查处来,用户体验就大大降低,觉得网页很慢很慢。
3、最简单最合理的方式就是用ajax异步加载,实现页面只要局部刷新,这样会比较好,可以由用户自己选择需要查阅的内容,这样需要查询出的内容也相对较少,响应速度也会快一点,具体ajax实现可以网上搜一下,很简单的。

希望对你有帮助。