<h:message for="foo"> 似乎不适用于 <section id="foo">

问题描述 投票:0回答:1

我已经定义了这个:

   <ui:define name="content">
        <section id="documents">
....
            <h:message for="documents" errorClass="errorc" />
        </section>

这位于上方模板中的

<body><main>
标签内。

然后我的控制器会执行以下操作:

} catch (MyException e) {
            ctx.addMessage("documents", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Trying to raise an error", null));
        }

但是错误没有显示在

h:message
中。我假设我使用了错误的目标 ID,但我不知道该怎么做。我尝试将
h:message
移到该部分之外,但也不起作用。

我只能让它与 general h:messages with null client ID 一起工作

jsf message
1个回答
2
投票

来自

<h:message>
文档(强调我的):

for

要显示消息的组件的客户端标识符。

<section>
标签是一个普通的 HTML 元素,而不是 Faces 组件。

添加

faces:id
将其转换为 Faces 直通元素:

<... xmlns:faces="jakarta.faces">

   <ui:define name="content">
        <section faces:id="documents">
            ...
            <h:message for="documents" errorClass="errorc" />
        </section>

或者当您尚未使用 Faces 4.0 时:

<... xmlns:jsf="http://xmlns.jcp.org/jsf">

   <ui:define name="content">
        <section jsf:id="documents">
            ...
            <h:message for="documents" errorClass="errorc" />
        </section>

或者,当您尚未使用 JSF 2.2 时,最好的选择是使用例如

<h:panelGroup layout="block">
组件让 JSF 生成
<div>
元素。

<...>

   <ui:define name="content">
        <h:panelGroup layout="block id="documents">
            ...
            <h:message for="documents" errorClass="errorc" />
        </h:panelGroup>

最后一种选择是创建一个自定义组件来生成

<section>

© www.soinside.com 2019 - 2024. All rights reserved.