我正在做一个小项目,我有一个jsp,它有一个带有动作的表单。当我单击该按钮时,它会成功调用动作映射方法。在那个方法中,我调用了一个数据库,它在大约 30k 记录上选择插入数据库。问题是在运行 db 代码 10-20 秒后,再次调用动作映射方法。我不知道它的原因。
我想要实现的是,Actionmapping 方法应该只调用一次,因为如果它调用两次就会违反完整性约束。我不知道 liferay 行为不同的原因。
我还想知道是否可以将 db 代码与 actionmapping 方法分开,以便在单击按钮时调用该方法,然后通过给出“正在进行中”的消息返回给 jsp。谁能给我一些关于这个的想法。谢谢!!!!
我正在使用带有 spring mvc 框架的 liferay 7 GA2
jsp文件代码:
<portlet:actionURL var="InvokeFileURL">
<portlet:param name="action" value="callaction"/>
</portlet:actionURL>
<aui:form action="<%= InvokeFileURL %>" method="post">
<div><b>Files Selected For Invoke</b></div>
<div style="width:1180px;height:670px;border:1px solid #000; margin-left:30px;max-height: 700px; overflow:auto;" id="invokefiles" >
</div>
<br/>
<p style= "text-align:right;margin-right:10px" ><aui:button name="Invoke" value="Invoke" type="submit" /></p>
</aui:form>
控制器代码
@ActionMapping(params = "action=callaction" )
public void invokerequest(ActionRequest request, ActionResponse response)
throws Exception {
_log.info("Invoke called"); //Called Twice
DBParserJDBC.DBParser(); //called twice
//Function to call DB ( its a long process)
response.setRenderParameter("action", "success");
}
@RenderMapping(params = "action=success")
public String viewSuccess() {
_log.info("#############Calling viewSuccess###########");
return "view";
}