actionparam converter
ronanker Apr 24, 2009 5:41 AMis it planned to finish the dev of org.ajax4jsf.component.UIActionParameter ?
it contains the following TODO : "perform conversion if converter is present".
Because i need to use a 'converter' on an 'actionparam' and without hacking, it doesn't work...
I wanted to do (and I would like to do) :
<a4j:jsFunction name="_onModificationValeurImputation#{rowCategorie}" action="#{ressourcesHandler.onModificationValeurImputation}" reRender="#{ressourcesHandler.columnsToReRender}"> <a4j:actionparam name="value" assignTo="#{ressourcesHandler.value}" converterId="#{ligneCategorie.categorie.converterId}" /> <a4j:actionparam name="idProjet" assignTo="#{ressourcesHandler.idLigneProjetModifiee}" /> <a4j:actionparam name="idPhase" assignTo="#{ressourcesHandler.paramId}" /> <a4j:actionparam name="idColonne" assignTo="#{ressourcesHandler.idColonne}" /> <a4j:actionparam name="columnsToReRender" assignTo="#{ressourcesHandler.columnsToReRender}"/> </a4j:jsFunction>but param 'converterId' doesn't exist...
so I tryed :
<a4j:jsFunction name="_onModificationValeurImputation#{rowCategorie}" action="#{ressourcesHandler.onModificationValeurImputation}" reRender="#{ressourcesHandler.columnsToReRender}"> <a4j:actionparam name="value" assignTo="#{ressourcesHandler.value}" > <f:converter converterId="#{ligneCategorie.categorie.converterId}" /> </a4j:actionparam> <a4j:actionparam name="idProjet" assignTo="#{ressourcesHandler.idLigneProjetModifiee}" /> <a4j:actionparam name="idPhase" assignTo="#{ressourcesHandler.paramId}" /> <a4j:actionparam name="idColonne" assignTo="#{ressourcesHandler.idColonne}" /> <a4j:actionparam name="columnsToReRender" assignTo="#{ressourcesHandler.columnsToReRender}"/> </a4j:jsFunction>but 'f:converter' doesn't support 'a4j:actionparam '...
then I created my own converterFactory and did :
<a4j:jsFunction name="_onModificationValeurImputation#{rowCategorie}" action="#{ressourcesHandler.onModificationValeurImputation}" reRender="#{ressourcesHandler.columnsToReRender}"> <a4j:actionparam name="value" assignTo="#{ressourcesHandler.value}" converter="#{converterFactoryHandler.converter[ligneCategorie.categorie.converterId]}" /> <a4j:actionparam name="idProjet" assignTo="#{ressourcesHandler.idLigneProjetModifiee}" /> <a4j:actionparam name="idPhase" assignTo="#{ressourcesHandler.paramId}" /> <a4j:actionparam name="idColonne" assignTo="#{ressourcesHandler.idColonne}" /> <a4j:actionparam name="columnsToReRender" assignTo="#{ressourcesHandler.columnsToReRender}"/> </a4j:jsFunction>(using Map interface to be able to give a param to the getter function)
it was still not-functionning so i went in the actionparam's code
And Finally I edited org.ajax4jsf.component.UIActionParameter to make it use the provided 'converter' param :-)
public Converter getConverter() { //HACK Begin if (null != _converter) { return _converter; } ValueExpression ve = getValueExpression("converter"); if (ve != null) { _converter = (Converter)ve.getValue(getFacesContext().getELContext()); } //HACK End return _converter; }
now that works...
but i don't like overriding 3rd party packages like that...
thanks in advance for completing your code (as i did or in a better way)
is there a jira for this TODO ? (i didn't find it)