我已经定义了这个:
<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
移到该部分之外,但也不起作用。
<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>
。