2

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

问题:我还有一个按钮 -Calculate在同一页面上,Submit按钮形式相同。单击“计算”按钮时,我需要获取acordform在单击按钮期间未编组的值Submit。在这里,我无法获取acordform值,而是获取acordform.

当我用谷歌搜索时,我看到 - Struts 2 没有线程安全问题,因为“为每个请求实例化了动作对象”。

当我再次发送请求时,请让我知道 Action 对象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...*/
    }
}

信任.xml:

<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>

JSP:

<s:form id="rtr" action="fileUploadAction" method="POST"
    enctype="multipart/form-data">
    <table border="0" cellspacing="0" cellpadding="0">
        <tr>
            <s:file name="uploadFile" label="Upload Request XML" />
            <s:submit value="Submit" action="submitAction" onclick="displayDetails();" /> 
            <s:hidden name="submitSuccess" />
            <s:submit value="Calculate" action="rateAction" /> 
        </tr>
    </table>
</s:form>
4

1 回答 1

0

不能一键操作吗?我的意思是提交 XML,并使用未编组的 XML 绘制结果......

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

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

这应该足够了:

<interceptor-ref name="defaultStack">
    <param name="fileUpload.allowedTypes">text/xml</param>
</interceptor-ref>
于 2013-09-18T14:04:25.063 回答