0

我正在尝试使用 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>
4

1 回答 1

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

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

于 2010-04-23T17:11:41.793 回答