posts - 56, comments - 77, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

需求是表单提交后, 转到另外一个已经存在的页面, 并在页面上方的空白处显示一条醒目的消息, 而且只显示一次 (刷新后这条消息不应该再出现).

对 Web 开发相当不熟,  Pair说这需求类似 RoR里的 flash message, 问Java里有没有.  我们用SpringMVC + Velocity, 看了看文档, 问了问人, 短时间没有得到确定方案.

那就试一试吧, 明知几乎不可能成功, 还是写下了下面的代码:

model.put("flashMessage""I'm stupid");
return new ModelAndView(new RedirectView("anotherPage"),  model);

果然不行,  model无法跨Controller.  那就放在Session里?  以我有限的Web经验, 应该可以, 问题是何时把它从Session中清除?

这应该是一个概念: 你放一个东西到Session里, 但你只能获得一次, 下次它就不存在了.

用类来表示概念,  我们只需在生成对象时把自己加到Session里, 在提供的获取函数中把自己从Session中移除, 那么第二次你就得不到它了.

import javax.servlet.http.HttpSession;

public class ThrowawayObject {
    
private HttpSession session;
    
private String attribute;
    
private Object value;

    
public ThrowawayObject(HttpSession session, String attribute, Object value) {
        
this.session = session;
        
this.attribute = attribute;
        
this.value = value;

        session.setAttribute(attribute, 
this);
    }

    
public Object getValue() {
        session.removeAttribute(attribute);
        
return value;
    }
}


在 Controller 里, 只需:

new ThrowawayObject( session, "flashMessage""I'm Stupid" );


在 View 里, 这里是 velocity 模板:

#if($flashMessage)
<script language="javascript">
    showNotificationMsg(
"$flashMessage.value")
</script>
#end


那么在 Spring MVC 中实现这类功能的标准做法是什么样的? 其它Java Web 框架呢?


评论

# re: ThrowawayObject :在Java中实现Rails里的Flash Message  回复  更多评论   

2008-10-06 22:51 by 隔叶黄莺
不错,受教了

# re: ThrowawayObject :在Java中实现Rails里的Flash Message  回复  更多评论   

2008-10-07 20:44 by simbas
可以看看grails的flash的实现

# re: ThrowawayObject :在Java中实现Rails里的Flash Message  回复  更多评论   

2010-01-21 04:00 by guest
controller 里面设置session值
template/view里面删除session值
pylons里面是这样做的。

只有注册用户登录后才能发表评论。


网站导航: