0

a4j:actionParam タグを使用してフォームの値をリセットしようとしています。しかし、null 値がターゲット 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メソッドは、null値を無視します。

    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 に答える