【问题标题】:JSF Seam StatusMessages read from Java从 Java 读取的 JSF Seam StatusMessages
【发布时间】:2011-08-27 21:33:16
【问题描述】:

我有一个 JSF/Seam 页面并添加了一个新的非 HTML 界面。我重用了业务逻辑,所以到处使用 StatusMessages.instance().add。

是否有默认方法可以从 Java 访问和处理此 StatusMessages,或者我是否必须扩展基类并传递受保护的消息列表?

谢谢

编辑:

StatusMessages.instance().add(Severity.ERROR, "Please enter a username.");

FacesMessages 没有返回他自己的消息列表(我在调试器中看到了条目)(FacesMessages.instance() 与 StatusMessages.instance() 是同一个对象)

FacesMessages.instance().getCurrentMessages();

它正在调用它

FacesContext.getCurrentInstance().getMessages();

这将返回一个空的迭代器。

【问题讨论】:

  • 我的错,谷歌没有帮助,但是查看类型层次结构有助于找到 FacesMessages 类。
  • ok FacesMessages 字段消息包含我添加的 2 条消息,但是当我尝试访问它们时 FacesContext.getCurrentInstance().getMessages() 被调用并且没有返回任何消息。
  • 什么代码?我做了上面的两个陈述。我发布了一条状态消息,然后我想阅读所有这些消息。

标签: jsf seam


【解决方案1】:

StatusMessages 是一种抽象,用于以不依赖于您使用的视图技术的方式处理消息。

这个抽象的默认实现是org.jboss.seam.faces.FacesMessages。这包含在 Seam 中以与 JSF 一起使用。

如果使用另一种视图技术重用您的业务逻辑,您可以提供特定的StatusMessages 实现。实际上,这就是为什么这是一个抽象。

@Scope(ScopeType.CONVERSATION)
@Name(StatusMessages.COMPONENT_NAME)
@Install(precedence=APPLICATION)
@BypassInterceptors
public class NonHtmlMessages extends StatusMessages
{
  /// implement here you message handling

由于@Install 的优先级,这将自动用于所有StatusMessages.instance()

【讨论】:

  • 我使用反射来访问受保护的方法“getMessages()”。在您的示例中,我必须删除 (precedence=APPLICATION) 因为他找不到它,但无论如何它是默认值。我扩展了 FacesMessages,只是将 getMessages() 添加为公共方法。也可以,我现在至少可以跳过反思。但是如果你知道的话,为什么 FacesContext.getCurrentInstance().getMessages() 返回一个空的迭代器会很有趣。
  • 我不知道为什么您发现迭代器为空,抱歉。有一次我尝试在 WebSphere 上的 FacesContext 中操作 FacesMessages,但我很快就放弃了。我认为它的工作方式很大程度上取决于 JSF 的实现。
猜你喜欢
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多