Richfaces a4j achtionparam设置空值

时间:2010-03-10 09:55:34

标签: null richfaces params ajax4jsf

我正在尝试使用a4j:actionParam标记重置表单中的某些值。但它接缝的空值永远不会到达目标bean。转换器正确接收它,返回null,但它永远不会在bean中设置。

目标是为不同的预定义值(上周,上个月等)填写start和endDate。对于“本周”值,必须将endDate重置为null。

 <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 个答案:

答案 0 :(得分:1)

我刚刚发现了这一点。 A4J中UIActionParameter的processAction方法忽略空值。

    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});
        }
    }
}

目前正在考虑解决这个问题的最佳方法!