gpt4 book ai didi

jsf - 如何编写和配置自定义 facelet 以覆盖 h :messages?

转载 作者:行者123 更新时间:2023-12-05 00:02:14 25 4
gpt4 key购买 nike

我正在将一个最初用 Weblogic Beehive 编写的站点重写为 JSF 2.0,我遇到了一个问题,我需要将新站点生成的消息转换为 完全 匹配现有站点的输出。

我尝试过使用标签,这很好,但是现有消息框架的样式和逻辑不太适合此输出。

JSF 中是否有允许我创建自定义标记的选项,该标记不仅会输出消息,还会对其执行条件逻辑?

例如,我一直在创建带有摘要和详细信息字符串的 FacesMessages,但旧站点的格式只显示最高摘要。例如,我添加了 4 条消息,每条消息都具有相同的摘要消息和不同的详细信息。我只想显示具有最高严重性的摘要。

此外,我需要将消息显示并设置为一个框,而不是每条消息和一些细节需要有条件 CSS 类。

最佳答案

如果您使用的是 JSF 2.x,那么您可以遍历 FacesContext#getMessageList() 在一个循环中。每一项都是一个 FacesMessage 它又有几个 setter/getter 。

<ui:repeat value="#{facesContext.messageList}" var="facesMessage">
Severity: #{facesMessage.severity}<br />
Summary: #{facesMessage.summary}<br />
Detail: #{facesMessage.detail}<br />
<br />
</ui:repeat>

这允许在消息周围进行更细粒度的 HTML 标记。

如果您仍在使用 FacesContext 中缺少此方法的 JSF 1.x , 那么你需要收集 FacesContext#getMessages() List<FacesMessage>首先借助一些实用程序 bean 甚至 EL 函数:

List<FacesMessage> messageList = new ArrayList<FacesMessage>();
Iterator<FacesMessage> messages = FacesContext.getCurrentInstance().getMessages();

while (messages.hasNext()) {
messageList.add(messages.next());
}

然后您可以迭代此 messageList在你看来使用 <ui:repeat>同理。

关于jsf - 如何编写和配置自定义 facelet 以覆盖 h :messages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com