关于 struts2 Action 的回写页面问题

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的配置

你直接把代码发过来吧。要不真无法看。