【发布时间】:2012-03-29 07:08:59
【问题描述】:
我是 JSF 的新手,我确信我在做一些愚蠢的事情,但是我几天来一直在尝试不同的事情并且无法取得任何进展。当用户输入日期而不是使用丰富的日历时,我正在尝试进行验证,但由于某种原因,我似乎无法触发验证器。页面代码如下:
<a4j:outputPanel id="responseReleaseDate" rendered="#{appealSearchManager.isVendor}">
<p><h:outputText value="#{messages.ResponseReleaseDate}"/></p>
<rich:calendar id="responseReleaseDateBegin" datePattern="MM/dd/yyyy"
enableManualInput="true"
buttonIcon="/images/calendar_icon.jpg" buttonClass="calendar"
validator="#{appealSearchManager.validateResponseReleaseDateBegin}"
value="#{appealSearchManager.responseReleaseDateBegin}">
</rich:calendar>
<rich:calendar id="responseReleaseDateEnd" datePattern="MM/dd/yyyy"
enableManualInput="true"
buttonIcon="/images/calendar_icon.jpg" buttonClass="calendar"
validator="#{appealSearchManager.validateResponseReleaseDateBegin}"
value="#{appealSearchManager.responseReleaseDateEnd}">
</rich:calendar>
</a4j:outputPanel>
我试图调用的 bean 代码如下:
public void validateResponseReleaseDateBegin(FacesContext facesContext, UIComponent uiComponent, Object value) throws ValidatorException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy");
if (value != null && !value.equals("")) {
try {
simpleDateFormat.parse(value.toString());
} catch (ParseException e) {
throw new ValidatorException(new FacesMessage(
FacesMessage.SEVERITY_ERROR,
MessageFormat.format((RootUtils.getCommonBundle().getString(BundleConstants.INVALID_ITEM)), "Response Release Date"),
MessageFormat.format(RootUtils.getCommonBundle().getString(BundleConstants.INVALID_DATE_FORMAT), "Date", "MM/DD/YYYY")));
}
}
}
奇怪的是,我可以使用下面的代码到达 validateResponseReleaseDateBegin(...) 方法(我知道,它对文本字段没有意义,它只是用于测试目的)。但是当我为丰富的日历输入输入时,我从未点击过该方法。
<div class="div30">
<p><h:outputText value="#{messages.ProgramInvoiceId}"/></p>
<h:inputText id="programInvoiceId"
validator="#{appealSearchManager.validateResponseReleaseDateBegin}"
value="#{appealSearchManager.programInvoiceId}"/>
</div>
任何想法为什么这个验证器在一个地方而不是另一个地方工作?
谢谢!
【问题讨论】:
-
如果
<rich:calendar>在从String到Date的隐式转换步骤中已经自行“验证”它,为什么还需要格式验证器? -
需求说明我需要收集所有验证数据并将其放入弹出窗口(使用 JQuery),但我很难让 Faces 消息出现在日期字段中。对于其他领域,上述方法有效。也许我应该回去弄清楚为什么这些 Faces Messages 不会首先出现,然后使用内部验证器。
-
我认为你没有理解真正的问题。我发布了一个答案。
标签: jsf jsf-2 richfaces ajax4jsf