场景点击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>
答案 0 :(得分:0)
您无法一键完成操作吗?我的意思是提交XML,并使用unmarshalled XML绘制结果...
如果不是,因为您需要在多个请求/操作之间共享内存中的XML(不保存在HD上,也不保存在DB上,只是发布到Action),请通过实现{{1}将其放入Session Map
在你的行动中。
请注意,您使用的拦截器太多......
这应该足够了:
SessionAware