情况是这样的,form1.jsp向aciton提交了一个表单,里面有一个参数是currentPage,值为10,在action中的同名属性currentPage就获得了这个值,值为10,现在我在action的execute()方法中把这个属性currentPage的值改为5,然后在form2.jsp中用<s:hidden name="currentPage" value="%{currentPage}"/> 或者${currentPage} 或者 <s:property value="currentPage" /> 取得currentPage的值。然而取得的值都是10,而不是5。我看了Struts2中OGNL的上下文环境,是这么说的“因为action在ValueStack的顶部,所以默认情况下,Struts2的Tag中的OGNL表达式将查找action中的变量”,但是我怎么取都取得的是request中的值,而不是action中的值,这是怎么回事?请教各位高手!

解决方案 »

  1.   

    <s:property value="#request.currentPage" />看看。
      

  2.   

    你要先在action中有currentPage的getset方法
    在execute()方法中改变值的时候
    转到成功页面取值的话肯定是改变后的
    当然稍微注意作用域的问题
      

  3.   


    set get方法当然都有,我看应该是value stack的问题,我看struts2资料上写着action是处在value stack的最顶层,ognl取值的话应该是首先在action里取值,request应该是在action的下层,如果要想从request中取值的话,就得明确的指定了。但是现在的问题是,我用ognl对action的值进行获取,取得的却是requset里的值。而不是资料上说的action的值,这是我疑惑的地方。难道还有什么方法能把requset提到value stack的顶层,而把action在value statck中的层次降低?
      

  4.   

    概念很好理解,先把你的代码Action,jsp和struts.xml贴出来看看。我再给你将原理
      

  5.   

    弄了近一天了,问题还是没有解决,但是弄了个临时变量,现在页面能正常的显示了。我在别的action中没有这样的问题,但就是在某些action中有这个问题,很诡异。谢谢 “redlotus_lyn”的热心帮助。现在不打算解决这个小问题了,等有时间在来弄吧。
      

  6.   

    只要action里面又get set 方法、、在方法内将 curpage =5; 就能得到
      

  7.   

    问题的详细描述:struts2版本:2.1.6在TestAction这个action里,有一个属性为operationType,此属性有set get方法。这个action的execute方法执行完毕后,dispatch到success.jsp页面,在success.jsp里,用<s:property value="operationType"/>来输出operationType的值。根据struts2的doc,struts2的值栈排列顺序为:1.临时对象;2.模型对象(这个不太理解是什么东西);3.Action对象(这就是问题所在);4:固定名称对象(如#application, #session, #request等对象)。现在我在success.jsp里,用<s:property value="operationType"/>来输出operationType的值。如果在action中operationType的值为100,那么确实可以输出100. 现在我根据action在值栈中的深度,用<s:property value="%{[2].operationType}"/>来输出值,然而却不能得到值,只能用<s:property value="%{[0].operationType}"/>才能取到值。这似乎和struts2值栈的顺序不相符。我现在只能取到临时对象里的operationType的值,而却取不到action里的值,就算指定了action的值栈深度也不行。现在的情况是,只能从位于值栈顶端的临时对象取值,也就是说,只能<s:property value="%{[0].operationType}"/>才能取到值。请教各位大虾,这是怎么回事?