struts2 里的 Action ,比如是 ListAction
里面的属性要么是接受页面的数据,要么是页面所需要的结果
那每次调用这个 Action 的时候他会不会从页面请求里自动填充?
如果是 struts1 则可以用 ActionForm 来缓存数据,页面刷新后还会自动会写。
可是在 struts2 里先给 ListAction 的某些成员变量赋值后,以后每次刷新页面,
即使在请求里传入了参数值,页面刷新以后又变回了原来的默认值。
比如我在 ListAction 里给如下变量赋值:
//BookDao.ORDER_DEFAULT = 1;
private int orderBy = BooKDao.ORDER_DEFAULT;
然后发请求时传参,如:list.action?orderBy=2;
虽然在 ListAction 里 orderBy 的值改变了,但是刷新页面后还是原来的默认值。
请问各位,我这是哪里错了,还是有什么解决办法
你根本就没有理解Struts2的核心,你是通过Ajax来发起了新的调用,而在新的调用中,你根本没有把orderBy的值传过去,当然就是用了默认值1了。
你的页面是在listBookPage,而你传参数没有在这时传递过去,是listBookCategory。所以当然是1值了。
BTW:不知道谁带你学的开发,代码写得真乱。而且没有一点的模式可言!
其实Struts2与Struts1的原理很多方面是一样的,你需要一个setter方法来改变值,即你通过URL传送过去的参数,会自动匹配action中对应的setter方法来执行,若没有,肯定不会执行。
像是你的,需要加一个方法
[code="java"]
public void setOrderBy(String orderBy){
this.orderBy = orderBy;
}
[/code]
来完成赋值。
实际上,Struts2是通过拦截器来实现自动赋值的。
当然,你也可以通过获取HttpServletRequest对象,通过request.getParameter("orderBy")来获得参数值。
把代码贴出来!
这个代码不是重点, 重点是你是否用了SPRING以及你的Struts2的配置
你直接把代码发过来吧。要不真无法看。