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

Java Struts2-同一操作类中不同操作之间对象值的持久性,java,jsp,struts2,jaxb,Java,Jsp,Struts2,Jaxb,场景:单击Submit按钮,我将XML解组为Java,然后在JSP中显示Java对象(创建一个formbean并将JAXB Java对象映射到这个formbean-PolicyForm并使用这个formbean在JSP中显示)。这很好用 问题:我在同一页上还有一个按钮-计算,与提交按钮的形式相同。单击“计算”按钮时,我需要获取在单击Submit按钮过程中被解组的acordform值。在这里,我无法获取acordform值,而是获取acordform的新对象 当我在谷歌上搜索时,我发现Struts

场景:单击
Submit
按钮,我将XML解组为Java,然后在JSP中显示Java对象(创建一个formbean并将JAXB Java对象映射到这个formbean-
PolicyForm
并使用这个formbean在JSP中显示)。这很好用

问题:我在同一页上还有一个按钮-
计算
,与
提交
按钮的形式相同。单击“计算”按钮时,我需要获取在单击
Submit
按钮过程中被解组的
acordform
值。在这里,我无法获取
acordform
值,而是获取
acordform
的新对象

当我在谷歌上搜索时,我发现Struts 2没有线程安全问题,因为“每个请求都实例化了操作对象”

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

动作类:

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...*/
    }
}
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...*/
    }
}

文本/xml
First.jsp
First.jsp
First.jsp
First.jsp

JSP:

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...*/
    }
}

您不能一次单击执行该操作吗?我的意思是提交XML,并用未编组的XML绘制结果

如果不是,因为您需要在多个请求/操作之间共享内存中的XML(不是保存在HD或DB上,只是发布到操作中),所以通过在操作中实现
SessionAware
将其放入
会话映射中

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

这就足够了:

<interceptor-ref name="defaultStack">
    <param name="fileUpload.allowedTypes">text/xml</param>
</interceptor-ref>

文本/xml

我确实尝试在会话中放置acordForm。但是我仍然获得了新对象,但没有使用acordForm对象值。放置在setSession()methodsession.put(“acordFormBean”,acordForm)中;并尝试在doratesmit()方法ACORD acordformFromSession=(ACORD)session.get(“acordFormBean”)中获取acordForm对象;然后您的尝试失败:>更加努力。如果您成功地将对象放入会话中,您将在稍后成功地检索到该对象,其中包含其所有数据。想知道我是否可以在调试时以外的任何位置看到Web应用程序的会话对象吗?您可以在操作的日志中打印它们,并使用JSP中的
@crazy287打印它们。您还可以使用
标记查看大量有用的信息。