系统用的是strut2,spring整合的,
struts.xml如下: <action name="index" class="indexAction">
<!-- 配置首页返回结果  -->
<result name="success" type="freeer">/WEB-INF/ftl/index.ftl</result>
<result name="input" type="freeer">/WEB-INF/ftl/index.ftl</result>
</action>
<action name="login" class="loginAction">
<!-- 配置登录返回结果  -->
<result name="success_user" type="freeer">/WEB-INF/ftl/success.ftl</result>
<result name="success_admin" type="freeer">/WEB-INF/ftl/success.ftl</result>
<result name="failure" type="freeer">/WEB-INF/ftl/failure.ftl</result>
<result name="input" type="chain">index</result>                        
</action> applicationContext.xml如下:<bean id="indexAction" class="com.winking.action.IndexAction">
<property name="systemService" ref="systemService"></property>
</bean>
<bean id="loginAction" class="com.winking.action.LoginAction">
<property name="systemService" ref="systemService"></property>
</bean>主要流程如下:
1.通过index.action获取数据转到index.ftl。
2.如果数据输入完全正确的话,则正常。
3.如果数据输入不正确,即通过login.action再由<result name="input" type="chain">index</result>到
  index.acton(<result name="input" type="freeer">/WEB-INF/ftl/index.ftl</result>)到index.ftl,
  并提示错误信息。正常的
4.但是再次输入错误信息的,则提示错误信息重复,原来的错误信息还在。即使再次输入正确信息的话同样提示错误信息。据网上说把applicationContext.xml里action的scope配置成prototype,这是一种方法,因为每次提交都不是同一个的action实例。
但是因为进入首页首先到indexAction获取信息,我改成prototype之后页面的数据就无法获取了,就报错了。
不知道各位大侠有什么办法解决了。。

解决方案 »

  1.   

    "但是因为进入首页首先到indexAction获取信息,我改成prototype之后页面的数据就无法获取了,就报错了。 "
    报啥子错??
      

  2.   


    报的是index.ftl没有数据,因为index.ftl页面的数据是有index.action提供的。
    也许我改成prototype之后,表单验证后就没有通过action,直接返回到了index.ftl。
      

  3.   

    可不可以这样考虑:
    每次提交表单的时候,首先执行一个方法,把原先的FieldError里的值先清空。
    但不知道怎么写
    可否提点建议
      

  4.   

    struts2验证不是全局验证吧?改为只对那个方法验证,把两个action 写成一个,
    把验证跳转设为动态的。
    反正都只在当前action 内部转发。 应为不会出问题了吧 
    <result name="input">${page}</result>  
    个人意见  我是菜鸟  
      

  5.   

    你用什么方法获取数据的;还有,spring的prototype是保证多线程的,这个选项是专门应对struts1的action单例的问题,单例线程不安全嘛,spring是把它变成线程安全的;
    struts2本身已经改善这个bug了,没必要在设立spring的多线程了,struts2已经是一个请求对应一个实例了;
      

  6.   

    嗯。问题解决了。
    改为prototype后,是因为chain的问题,需要加拦截器chain和basicStack就可以了
      

  7.   

    能否详细点,是不是不用struts.xml中的的缺省拦截器表,只使用chain和basicStack即可,我试验了,还是不对。
      

  8.   

    将你托管该spring的bin属性改成prototype,比如:scope="prototype",因为你托管的action在spring中默任为单例子模式的,你这样设置以后就会每次请求是创建一个新的action实例。
      

  9.   

    楼上正解,struts自己管的时候,它是单件模式
    所以bean给spring管的时候,要配置成单件模式
    不然每次调交,bean都不一样,所以error信息重复