wac*_*nga 6 ruby java ruby-on-rails spring-mvc
在Java世界中,实现类似Rails的flash消息(如"更新成功" http://api.rubyonrails.org/classes/ActionController/Flash.html)的最佳方法是什么?我正在使用Spring MVC.
我在Spring MVC中用会话范围的 bean 做了这个.
public class FlashImpl implements Flash, Serializable{
private static final long serialVersionUID = 1L;
private static final String ERROR = "error";
private static final String WARNING = "warning";
private static final String NOTICE = "notice";
private String message;
private String klass;
public void message(String klass, String message) {
this.klass = klass;
this.message = message;
}
public void notice(String message) {
this.message(NOTICE, message);
}
public void warning(String message) {
this.message(WARNING, message);
}
public void error(String message) {
this.message(ERROR, message);
}
public boolean isEmptyMessage() {
return message == null;
}
public void clear() {
this.message = null;
this.klass = null;
}
public String getMessage() {
String msg = message;
this.clear();
return msg;
}
public void setMessage(String message) {
this.message = message;
}
public String getKlass() {
return klass;
}
public void setKlass(String klass) {
this.klass = klass;
}}
Run Code Online (Sandbox Code Playgroud)
诀窍是在第一次读取消息后消除消息.这样它可以在帖子后存活到重定向.
我假设只有一种类型的消息可以请求!如果您不想这样,您可以按照建议创建一个hashmap.
我在我的控制器中注入了这个bean(实际上我将它注入到所有其他控制器继承的基本控制器中).
在JSP中,您必须添加如下代码:
<c:if test="${!flash.emptyMessage}" >
<div class="${flash.klass}">${fn:escapeXml(flash.message)}</div>
</c:if>
Run Code Online (Sandbox Code Playgroud)
我建议将其实现为会话范围的HashTable,其中字符串键映射到自定义FlashItem对象.FlashItem将只包含您要存储的对象或字符串以及一个布尔值(可能称为IsNew),当您将新项目插入HashTable时,该值应设置为true.
在每个页面上加载然后迭代HashTable,将任何IsNew = true项设置为false,并删除IsNew已经为false的任何项.这应该会给你一个与Rails闪存功能类似的工作.
| 归档时间: |
|
| 查看次数: |
2894 次 |
| 最近记录: |