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


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

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

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

  1. model.put("flashMessage","I'mstupid");
  2. returnnewModelAndView(newRedirectView("anotherPage"),model);


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

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

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

  1. importjavax.servlet.http.HttpSession;

  2. publicclassThrowawayObject{
  3. privateHttpSessionsession;
  4. privateStringattribute;
  5. privateObjectvalue;

  6. publicThrowawayObject(HttpSessionsession,Stringattribute,Objectvalue){
  7. this.session=session;
  8. this.attribute=attribute;
  9. this.value=value;
  10. session.setAttribute(attribute,this);
  11. }

  12. publicObjectgetValue(){
  13. session.removeAttribute(attribute);
  14. returnvalue;
  15. }
  16. }


在 Controller 里, 只需:

  1. newThrowawayObject(session,"flashMessage","I'mStupid");



在 View 里, 这里是 velocity 模板:

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


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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值