Struts2-同一Action类中不同操作之间的对象值的持久性

时间:2013-09-18 13:31:15

标签: java jsp struts2 jaxb

场景点击Submit按钮后,我将XML解组为Java,然后显示Java对象(创建了formbean并将JAXB java对象映射到此formbean - { {1}}并在JSP中使用此formbean在JSP中显示。这很好。

问题:我在同一页面上还有一个按钮 - PolicyForm,其格式为Calculate。点击'计算'按钮我需要获取在Submit按钮单击期间解组的acordform值。在这里,我无法获得Submit值,而是获得acordform的新对象。

当我用google搜索时,我看到 - Struts 2没有线程安全问题,因为" Action对象被实例化为每个请求"。

当我再次发送请求时,请让我知道每次都要实例化Action对象 - acordform吗?如果是的话,我该如何避免这种情况?因为即使在下一个请求中我也需要acordform个对象值。

行动类:

acordform

Strust.xml:

public class RateAction extends ActionSupport implements
        ServletRequestAware,SessionAware {

    /* ... */

    // ACORD xml form bean
    private ACORD acordform = new ACORD();

    //To display the values in the JSP
    private PolicyForm policyForm;

    public ACORD getAcordform() {
        return acordform;
    }

    public void setAcordform(ACORD acordform) {
        this.acordform = acordform;
    }

    public String doSubmit() {
       /*...Unmatshalling from XML to Java -acordform is done..*/
    }

    public String doRateSubmimt() 
    {
       /*..trying to get the acordform values which are being set 
         previously in doSubmit() method...*/
    }
}

JSP:

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<package name="default" extends="struts-default" namespace="/" >

    <action name="fileUploadAction"
        class="com.main.common.action.RateAction" >
        <interceptor-ref name="fileUpload">
            <param name="allowedTypes">text/xml</param>
        </interceptor-ref>
        <interceptor-ref name="defaultStack"></interceptor-ref>
             <interceptor-ref name="params"/>   
             <interceptor-ref name="prepare"/>   
             <interceptor-ref name="basicStack"/> 
         <result name="success">First.jsp</result>
         <result name="input">First.jsp</result>
    </action>

    <action name="submitAction" class="com.main.common.action.RateAction" method="doSubmit">
    <result name="success">First.jsp</result>
    </action>
    <action name="rateAction" class="com.main.common.action.RateAction" method="doRateSubmit">
        <result name="success">First.jsp</result>
    </action>
</package>

1 个答案:

答案 0 :(得分:0)

您无法一键完成操作吗?我的意思是提交XML,并使用unmarshalled XML绘制结果...

如果不是,因为您需要在多个请求/操作之间共享内存中的XML(不保存在HD上,也不保存在DB上,只是发布到Action),请通过实现{{1}将其放入Session Map在你的行动中。

请注意,您使用的拦截器太多......

这应该足够了:

SessionAware