JSF 1.2 - rich:calendar和f:converter导致a4j:commandButton不再被调用

时间:2017-11-11 21:03:20

标签: jsf calendar richfaces jsf-1.2

我正在使用转换器使用rich:calendar解析用户填充的日期,并将enableManualInput设置为true。

富:日历(某些数据已针对安全和数据隐私问题进行了修改):

<rich:calendar enableManualInput="true"
    value="#{beanAction.periodFrom}" showFooter="true"
    timeZone="#{beanAction.timeZone}"
    id="periodFrom"
    datePattern="#{beanAction.datePattern}"
    showApplyButton="true" popup="true"
    converterMessage="#{bndl.invalidDateFormat}">

        <f:converter converterId="JSFStringToDateConverter"/>

</rich:calendar>

在转换器中,我使用SimpleDateFormat解析日期。但是,如果解析失败,我正在执行一些业务逻辑,然后抛出一个ConverterException。

转换器方法

@Override
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent,
  String inputString) throws ConverterException {
  Date date = null;
  try {
    date = simpleDateFormat.parse(inputString);
  } catch (ParseException e) {
    e.printStackTrace();
    BeanAction beanAction = (BeanAction) facesContext
      .getApplication().evaluateExpressionGet(facesContext,
        "#{beanAction}", BeanAction.class);
    if (beanAction != null) {
      beanAction.setShowErrorMessagePopup(true);
    }
    throw new ConverterException();
  }
  return date;
}

在调试代码时,我得到了通过转换器的操作,如果一切正常,则转到beanAction。否则,转换器会抛出异常,并且页面上将根据需要呈现rich:消息。

现在我的问题就是无论我在抛出ConverterException的情况下在这个页面上做什么,通过a4j:commandButton调用的动作将不再通过转换器或beanAction,它什么都不做除非我刷新页面或重新调用再次加载此页面的操作。

A4J:的commandButton

<a4j:commandButton
    value="#{bndl.apply}"
    action="#{beanAction.executeAction}"
    id="applyButton" styleClass="btn"
    oncomplete="if(#{beanAction.showErrorMessagePopup}){#{rich:component('errorMessagePopup')}.show()};"
    reRender="myPageForm,errorMessagePopup,errorMessagePopupForm" />

我真的在这个问题上搜索了很多,没有运气,如果有人能帮助我,我会非常感激。

更新

作为一种解决方法,我已经从Converter中删除了抛出的异常,并从beanAction处理了null值(一旦解析失败)。虽然,这解决了我的问题,但这不是我想要处理它的方式。我仍然担心它为什么不工作,它是一个错误还是我错过了什么?

0 个答案:

没有答案