2010-03-10 4 views
0

J'essaie de réinitialiser certaines valeurs dans un formulaire en utilisant la balise a4j: actionParam. Mais il semble que les valeurs nulles n'arrivent jamais dans le bean cible. Le convertisseur le reçoit correctement, renvoie null, mais il n'est jamais défini dans le bean.Richfaces a4j achtionparam définir la valeur null

La cible est de remplir les dates de début et de fin pour différentes valeurs prédéfinies (dernière semaine, dernier mois, etc.). Pour la valeur "This week", endDate doit être réinitialisé sur 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> 

Répondre

1

Je viens de découvrir cela aussi. La méthode processAction de UIActionParameter dans A4J ignore les valeurs 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}); 
     } 
    } 
} 

Actuellement en train de réfléchir à la meilleure façon de contourner ce problème!

+0

en passant des dates avec une valeur spécifique et en les ignorant dans le setter du backing bean pourrait être une solution de contournement. (date 0-0-0 0: 0: 0 par exemple). Mais ça sent mauvais –

Questions connexes