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(s) はキューに入れられましたが、表示されていない可能性があります」などの警告は表示されません)。
コードの何が問題なのかわかりません。誰か助けてくれませんか?