Rails用Java编写flash消息

wac*_*nga 6 ruby java ruby-on-rails spring-mvc

在Java世界中,实现类似Rails的flash消息(如"更新成功" http://api.rubyonrails.org/classes/ActionController/Flash.html)的最佳方法是什么?我正在使用Spring MVC.

Man*_*tos 6

我在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)


Ada*_*der 5

我建议将其实现为会话范围的HashTable,其中字符串键映射到自定义FlashItem对象.FlashItem将只包含您要存储的对象或字符串以及一个布尔值(可能称为IsNew),当您将新项目插入HashTable时,该值应设置为true.

在每个页面上加载然后迭代HashTable,将任何IsNew = true项设置为false,并删除IsNew已经为false的任何项.这应该会给你一个与Rails闪存功能类似的工作.