gpt4 book ai didi

java - Struts2-同一Action类中不同 Action 之间对象值的持久化

转载 作者:行者123 更新时间:2023-11-29 08:58:35 25 4
gpt4 key购买 nike

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

问题:我在同一页面上还有一个按钮 - Calculate,其形式与 Submit 按钮相同。单击“计算”按钮后,我需要获取在单击 Submit 按钮期间解码的 acordform 值。在这里,我无法获取 acordform 值,而是获取了 acordform 的新对象。

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

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

Action 类:

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:

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

最佳答案

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

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

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

这应该足够了:

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

关于java - Struts2-同一Action类中不同 Action 之间对象值的持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18873630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com