我正在开发一个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 ... />
我看到我的错误就好了,但是我收到了该页面的所有全局错误消息,这不是我想要的。我错过了什么?
答案 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."));
}
}