我正在使用Struts2框架(带注释),需要重定向帮助。
步骤1:动作类扩展ActionSupport
,在执行方法中添加动作消息。操作成功后,将位置设置为JSP - common_popup.jsp
。
步骤2:在JSP中检查hasActionMessages()
并设置带有操作消息的对话框。
ISSUE: a.在重定向操作成功时,操作消息集丢失。b.由于重定向,common_popup.jsp
在一个新的URL中打开。
是否有一种方法将重定向设置为FALSE ?这样我就保留了向action类提交请求的页面,并且common_popup.jsp作为弹出对话框出现在同一页面的顶部。
ACTION类:
public class Settings extends ActionSupport {
@Action(value="settings",
results = { @Result (name="success", location="common_popup.jsp"),
@Result (name="failure", location="${actionUrl}")
})
@Override
public String execute()
{
try {
addActionMessage(" ITS SETTINGS TIME !! ");
}
catch (Exception exp )
{
addActionError(" Failed to update the data base configuration. Please retry. ");
this.actionUrl = "main.jsp?settings=true";
return "failure";
}
return "success";
}
}
JSP代码- common_popup.jsp
:
<html>
<head>
<link rel="stylesheet" type="text/css" href="stylesheets/jquery-ui.css">
<link rel="stylesheet" type="text/css" href="stylesheets/loader.css">
<script src="scripts/jquery-1.11.0.min.js" type="text/javascript"></script>
<script src="scripts/jquery-ui-1.10.4.js" type="text/javascript"></script>
<script src="scripts/loader.js" type="text/javascript"></script>
</head>
<body>
<s:if test="hasActionMessages()">
<div id="actionMessage" class="ui-dialog" style="display:none" >
<s:actionerror/>
</div>
<script>
$( "#actionMessage" ).css("display","");
$( "#actionMessage" ).dialog();
</script>
</s:if>
</body>
</html>
结果results = { @Result (name="success", location="common_popup.jsp")
正在将servlet dispatcher
转发到从结果位置构建的URL。
这也是已知的默认dispatcher
结果类型。因此,在您的代码中不是重定向,而是分派或转发由location
属性指定的JSP页面。
所以,代码中没有显示重定向。如果是这样,并且您希望在操作之间保存操作消息(您不应该重定向到JSP),您可以使用messageStore
拦截器。
在链接页面上找到这个拦截器的示例,或者阅读我的答案以找到更详细的示例解释