无法使用 jsf 显示验证消息

Can't Display a message for a validation using jsf

我是使用 JSF 进行 Web 开发的新手,我在显示验证消息时遇到问题。 我正在尝试显示与长度验证相关的消息。

这是页面的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">

<h:head></h:head>
<h:body>
    <h:form>
        <h:message showDetail="true" showSummary="true" for="txtNum" />

        <p:panelGrid columns="2">

            <p:outputLabel value="value" id="lblValue" for="txtNum" />
            <p:inputText value="#{test.num}" required="true" id="txtNum">
                <f:facet name="">
                    <f:validateLength maximum="3"></f:validateLength>
                </f:facet>
            </p:inputText>
            <p:commandButton value="do" action="#{test.func()}"></p:commandButton>
        </p:panelGrid>
    </h:form>
</h:body>
</html>

这是托管 bean 的代码(从 faces 配置中配置):

public class Test {
    private int num;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String func()
    {
        return null;
    }

}

这应该有效。不要忘记 ID 和命名 containers.When 使用 AJAX 不要跳过 processupdate 属性。

<h:form id="form">
    <p:panelGrid columns="2" id="formGrid">
        <p:outputLabel value="value" id="lblValue" for=":form:txtNum" />
        <p:inputText value="#{test.num}" required="true" id="txtNum">
            <f:validateLength maximum="3"/>
        </p:inputText>
        <h:message showDetail="true" showSummary="true" for=":form:txtNum" />
        <p:commandButton value="do" action="#{test.func()}" process=":form:formGrid" update=":form:formGrid"/>
    </p:panelGrid>
</h:form>