【问题标题】:JSF Clearing facesmessage after each requestJSF 在每次请求后清除 facesmessage
【发布时间】:2011-11-17 02:14:20
【问题描述】:

我有一个报告页面,它提交用户生成的查询以进行数据检索。当查询不存在数据时,我将 facesmessage-“No data”添加到会话并将其与提交按钮相关联,因此它显示在按钮旁边。 当用户修改查询并重新提交时,我希望清除“无数据”消息。我找不到办法做到这一点。我在 sessionmap 或 requestmap 中找不到任何消息,因此无法使用 removemessage()。 因此,目前我通过将 facesmessages 设置为空白摘要和详细信息来使用 hack。如何清除每个提交的查询的消息?

谢谢。


BalusC,

找不到回复按钮,所以我正在编辑原帖

这是我所拥有的: JSF 1.2, Richfaces 3.3

我的报告页面的支持 bean 是 sessionscoped。该页面有一个用于选择报告类型的下拉菜单和一个连接到操作(genrep)的提交按钮。该按钮与 Rich:message 标签相关联。

选择并提交报告类型后,genrep() 会检查数据库以查看是否有任何数据,如果不存在则实例化一个 facesmessage,将摘要和详细信息设置为“无数据”并将其添加到提交按钮通过facescontext的addmessage方法。

当用户提交另一个包含数据的查询时,genrep() 从 facescontext 获取响应流,将 contentype 设置为“application/vnd.ms-excel”并将数据写入其中。关闭并刷新流并调用 responsecomplete()。除了现在,我仍然可以在上一个无数据查询的按钮旁边看到“无数据”消息。

谢谢。

【问题讨论】:

  • 这应该已经是默认行为了。消息是请求范围的。您需要详细说明有关测试用例的技术细节(如有必要,请提供 SSCCE)。
  • 原帖已编辑。请检查。

标签: jsf request message


【解决方案1】:

当用户提交另一个包含数据的查询时,genrep() 从 facescontext 获取响应流,将 contentype 设置为“application/vnd.ms-excel”并将数据写入其中。关闭并刷新流并调用 responsecomplete()。除了现在,我仍然可以在上一个无数据查询的按钮旁边看到“无数据”消息。

因此,您正在提供文件下载,但您希望当前页面也会刷新。由于 HTTP 的性质,这是不可能的。您不能在一个请求上发回两个响应(一个用于文件下载,另一个用于新页面)。您可以做的最好的事情是让客户端发送两个请求或使用 onclick 属性中的一行 JavaScript 隐藏消息。后者更适合这种特殊情况。

【讨论】:

  • 谢谢。看起来任何隐藏消息的 javascript 都会不加选择地隐藏包含 msg 的元素。那就是元素将被隐藏 b4 代码有机会访问服务器并决定是否应显示 msg。我希望我说得通。
  • 我不完全确定你所说的“b4”是什么意思(请把单词完整地写出来,英语不是我的母语,所以我不熟悉短信/街头/聊天/童言无忌) .但我认为你基本上是对的,是的。完全按照我在回答中的建议,使用 JS 在点击时隐藏消息。
  • “b4”的意思是“之前”。 cmets有字数限制时,我会使用“短信/街头/聊天/童言无忌”。
  • 好的,谢谢。不过,您的第一条评论还有很多空间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多