2010-03-10 1 views
0

Я пытаюсь сбросить некоторые значения в форме, используя тег a4j: actionParam. Но он швыряет, что нулевые значения никогда не попадают в целевой компонент. Конвертер принимает его правильно, возвращает значение null, но никогда не устанавливается в bean-компоненте.Richfaces a4j achtionparam set null value

Цель состоит в том, чтобы заполнить начальную и конечную даты для разных предопределенных значений (на прошлой неделе, в прошлом месяце и т. Д.). Для значения «На этой неделе» значение endDate должно быть сброшено до нуля.

<rich:menuItem value="Last week"> 
    <a4j:support event="onclick" reRender="criteriaStartCalendar,criteriaEndCalendar"> 
    <a4j:actionparam name="startDate" value="#{dateBean.lastWeekStart}" assignTo="#{targetBean.startDate}" /> 
    <a4j:actionparam name="endDate" value="#{dateBean.lastWeekEnd}" assignTo="#{targetBean.endDate}" /> 
    </a4j:support> 
    </rich:menuItem> 

ответ

1

Я только что нашел это. Метод processAction параметра UIActionParameter в A4J игнорирует нулевые значения.

public void processAction(ActionEvent actionEvent) 
     throws AbortProcessingException { 
    FacesContext context = getFacesContext(); 
    ELContext elContext = context.getELContext(); 
    ValueExpression updateBinding = getAssignToBinding(); 
    if (updateBinding != null && (!updateBinding.isReadOnly(elContext))) { 
     Object requestValue = context.getExternalContext() 
       .getRequestParameterMap().get(getName()); 
     if (requestValue != null && requestValue instanceof String) { 
      Class<?> type = updateBinding.getType(elContext); 
      Converter converter = createConverter(context, type); 
      if (null != converter) { 
       requestValue = converter.getAsObject(context, this, 
         (String) requestValue); 

      } 
     } 

     // null is explicitly ignored! 
     if (null != requestValue) { 
      updateBinding.setValue(elContext, requestValue); 
     } 


     MethodExpression listener = getActionListener(); 
     if (listener != null) { 
      listener.invoke(elContext, new Object[] {actionEvent}); 
     } 
    } 
} 

В настоящее время мы думаем о лучшем способе обойти это!

+0

Передача дат с определенным значением и игнорирование их в установщике бэкэнда может быть обходным путем. (например, 0-0-0 0: 0: 0). Но это плохо пахнет –