ThrowawayObject :在Java中实现Rails里的Flash Message


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

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

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

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

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

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

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

  1. import javax.servlet.http.HttpSession;

  2. public class ThrowawayObject {
  3.     private HttpSession session;
  4.     private String attribute;
  5.     private Object value;

  6.     public ThrowawayObject(HttpSession session, String attribute, Object value) {
  7.         this.session = session;
  8.         this.attribute = attribute;
  9.         this.value = value;
  10.         session.setAttribute(attribute, this);
  11.     }

  12.     public Object getValue() {
  13.         session.removeAttribute(attribute);
  14.         return value;
  15.     }
  16. }

在 Controller 里, 只需:

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


在 View 里, 这里是 velocity 模板:

  1. #if($flashMessage)
  2. <script language="javascript">
  3.     showNotificationMsg("$flashMessage.value")
  4. </script>
  5. #end

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值