Richfaces a4j achtionparam установить нулевое значение - PullRequest
0 голосов
/ 10 марта 2010

Я пытаюсь сбросить некоторые значения в форме, используя тег a4j: actionParam. Но кажется, что нулевые значения никогда не поступают в целевой бин. Преобразователь получает его правильно, возвращает ноль, но он никогда не устанавливается в компоненте.

Цель состоит в том, чтобы заполнить start и endDate для различных предопределенных значений (последняя неделя, последний месяц и т. Д.). Для значения «Эта неделя» 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 Ответ

1 голос
/ 23 апреля 2010

Я тоже это узнал. Метод 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});
        }
    }
}

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

...