jsf rich:消息不显示错误

时间:2014-02-13 15:27:21

标签: jsf jsf-2 richfaces ajax4jsf

我正在开发一个JSF网站,并且正在努力处理错误消息。我想在两个地方显示消息。一个应该是一个全局错误消息来捕获所有(这是有效的),另一个应该捕获特定输入的消息...这是我遇到问题的地方。这是我的表格:

<h:form class="form" id="homeInfo">
    <h:panelGroup layout="block" styleClass="#{HomeBean.hasResults ? 'disabled': ''}">
        <fieldset data-role="controlgroup" class="multi-line">
            <legend>#{homeBean.homeIdLable}</legend>
            <h:inputText id="homeId" value="#{homeBean.homeId}" placeholder="Optional"
                         styleClass="#{HomeBean.hasResults ? 'disabled': 'required'}"/>
            <rich:message for="homeId" styleClass="inline-error" />
        </fieldset>
        <br/>
        <a4j:commandButton id="submit" value="Submit" styleClass="ui-btn-up-undefined ui-btn"
                           action="#{homeController.matchHomeId(HomeBean.vin)}"
                           disabled="#{homeBean.hasResults}"
                           render="#{empty facesContext.messageList ? 'homeList':''}"
                           onbegin="displayBusy()"
                           oncomplete="displayBusy('', true); matchHomeId(#{homeBean.hasResults});"/>
        <br/>
    </h:panelGroup>
</h:form>

这是我在控制器中的逻辑,它将错误抛给了一个无效的homeId:

public void matchHomeId(String homeId) {
    if (validHomeId) {
        do logic ....
    } else {
        getFacesContext().addMessage("homeInfo:homeId",
                new FacesMessage(FacesMessage.SEVERITY_ERROR, "The home ID you entered is not valid.", "The home ID you entered is not valid."));
    }
}

我读到的所有内容都说消息的组件ID应该是:这就是为什么我使用homeInfo:homeId作为我的错误消息。但是,我也尝试过homeId。如果我从<rich:message ... />更改为<rich:messages ... />我看到我的错误就好了,但是我收到了该页面的所有全局错误消息,这不是我想要的。我错过了什么?

1 个答案:

答案 0 :(得分:0)

与我在其中读到的其他内容相反,其中显示客户端ID应为<formId>:<inputId>homeInfo:homeId这不起作用。我尝试过这种方法,但确实有效:

private UIComponent component;

public UIComponent getComponent() {
    return component;
}

public void setComponent(UIComponent component) {
    this.component = component;
}

然后我将输入绑定到组件,然后将component.getClientId()传递给错误,这很有效。在调试器中,我注意到传入的id是homeId。但是,如果我将homeId硬编码为无效的clientId。最后我注意到在常规验证错误上一切正常。但是,正在使用的id是homeInfo-homeId。如此长的故事......传入的客户端ID应为<formId>-<inputId>

public void matchHomeId(String homeId) {
    if (validHomeId) {
        do logic ....
    } else {
        getFacesContext().addMessage("homeInfo-homeId",
                new FacesMessage(FacesMessage.SEVERITY_ERROR, "The home ID you entered is not valid.", "The home ID you entered is not valid."));
    }
}