我的Seam项目中有以下xhtml代码:
<rich:column style="text-align:right">
<h:inputText id="txtPercReqAmount" maxlength="6" style="width:75px;text-align:right;" value="#{pib.reservedPercentage}">
<a4j:support event="onchange" ajaxSingle="true" action="#{requestForm.onReservedPercentageChange(pib)}" reRender="txtReqAmount,txtBudget,msgPercReqAmount"/>
</h:inputText>
</rich:column>
<rich:column width="250px" style="text-align:left">
<rich:message id="msgPercReqAmount" for="txtPercReqAmount" styleClass="messagesingle" errorClass="errormsg" infoClass="infomsg" warnClass="warnmsg">
<f:facet name="errorMarker"><h:graphicImage url="/img/msgerror.png"/></f:facet>
</rich:message>
</rich:column>
我在inputText的“onchange”事件中进行了一些验证。如果验证失败,我想在<rich:message>
列中写入错误消息。
这是我的支持bean事件的java代码:
public void onReservedPercentageChange(ProcessInstanceBudget pib) {
BigDecimal arg2 = pib.getReservedPercentage();
BigDecimal ra;
try
{
if (arg2 instanceof BigDecimal)
ra = (BigDecimal) arg2;
else
ra = BigDecimal.ZERO;
}
catch (ClassCastException cce)
{
facesMessages.add(Severity.ERROR, "The allocation request isn't valid!");
return;
}
if (ra.compareTo(BigDecimal.ZERO) < 0 || ra.compareTo(new BigDecimal(100.0)) > 0) {
facesMessages.add(Severity.ERROR, "Allocation percentage must be in the range between 0 and 100!");
return;
}
updateBudgetAllocation(pib);
}
问题是没有显示错误消息(我没有收到任何警告,例如“FacesMessage已经入队,但可能没有显示”)。
我无法弄清楚我的代码有什么问题。有人可以帮忙吗?
答案 0 :(得分:0)
您将邮件添加为全局错误,但没有任何元素可以显示它。
您想要的不是将其添加为全局错误消息,而是将其附加到导致错误的输入组件。
你可以这样做:
FacesContext.getCurrentInstance().addMessage(clientId,
new FacesMessage(FacesMessage.SEVERITY_ERROR, errorMessage, errorMessage));
这里重要的部分是UIComponent的给定clientId。如果你有这个组件(例如通过绑定),你可以通过UIComponent.getClientId()获得它。 (见Retrieving other component's client ID in JSF 2.0)。
如果你没有对组件的引用,你唯一的机会就是分析整个组件树并通过facelet文件中提供的id =“...”的id来搜索它(.xhtml )。 (见An efficient way to compute a UIComponent clientID?)