0)BaseAction写了套message处理方法:
/**
* 设定页面显示提示的信息
*
* @param msg
*/
@SuppressWarnings("unchecked")
public void setMessage(String msg) {
Collection<String> messages = this.getActionMessages();
if (messages != null) {
messages.clear();
messages.add(msg);
this.setActionMessages(messages);
}
}
/**
* 清空所有页面的异常信息和校验错误信息
*/
public void clearMessages() {
this.clearErrorsAndMessages();
this.fieldErrorsList = null;
}
1)footer.jsp组装了action层弹出提示信息标签
<!-- 弹出提示信息 -->
<s:if test="hasActionMessages()">
<s:iterator value="actionMessages">
<div id="dialog_message">
<p style="font-size: 110%">
<img src="images/form/btn_info16.png" />
<s:property escape="false" />
</p>
</div>
</s:iterator>
<s:if test="!clearErrorsAndMessages()">
<s:set name="actionMessages" value=""></s:set>
</s:if>
</s:if>
2)jQuery写了组基于dialog实现弹出信息带css样式的脚本:
/**
* 定义确认信息对话框
*/
var dialog_message_option = {
modal : true,
autoOpen : true,
width : 280
};
$.extend(true, dialog_message_option, {
title : "提示信息",
buttons : [ {
text : "确定",
click : function() {
$(this).dialog("close");
// 手动清空!
//$("#dialog_message").empty();
}
} ]
});
if (isNotEmpty($("#dialog_message").html())) {
$("#dialog_message").dialog(dialog_message_option);
}
3)问题来了,如果用jquery.layout-latest.js组装页面布局,每次load主表单jsp时,提示信息按上面的方式总是消除不了,可如果正常jsp加载不用load局部加载,正常好使。
试了各种action拦截器清空msg也好、action方法前清空也好,都不行,最后只好加了一句js来控制(上面被注释的那句),点击信息对话框确定按钮时触发:
// 手动清空!
//$("#dialog_message").empty();
4)jsp页面打开debug查看,每次actionMessages对象都是[],看来是load后js的block块在作祟?还是session级别设定有关?或是dom对象所致?
<s:if test="%{true}">
<div style="text-align: left; float: left; width: 100%">
<s:debug></s:debug>
</div>
</s:if>