Perché EL mi dà l'oggetto sbagliato come parametro tra parentesi?
Domanda
Ecco la situazione:
In una ricca: dataTable in a4j: forma, a creare un a4j: commandLink per selezionare i valori e passarlo al bean con il jboss sintassi azione el
action="#{bean.myaction(myparameter)}"
Questo funziona senza problemi.
Ma se ho ri-renderizzare il form per filtrare il DataTable con una chiamata AJAX, quando seleziono il valore, mi dà i risultati sbagliati: l'indice della selezione, ma i dati prima che il filtraggio
Tutte le idee?
Grazie Zack per avermi dato la giusta soluzione in soli 5 minuti.
Credo che il passaggio di parametri nell'azione tra parentesi è più elegante, ma, hey: questo funziona. :)
Grazie molto.
P.S. Sto modificando il titolo troppo.
Soluzione
Provare a utilizzare:
<a4j:commandLink action="#{bean.myaction}">
<f:param name="myparameter" value="paramValue" />
</a4j:commandLink>
e quindi accedere a tale parametro nella vostra azione tramite il requestParameter("myparameter")
attraverso il FacesContext
.
Come un lato nota, questo non è JBoss EL, è il linguaggio di espressione unitaria (EL). E 'solo una caratteristica di JSP / JSF, in generale, come specificato dal solarium.
Altri suggerimenti
Oltre alla risposta del Zack, direi che se è necessario estendere le espressioni EL in modo da avere la possibilità di chiamare il metodo con i parametri, è possibile utilizzare il biblioteca EL Funtori :
action="#{bean.myaction$[myparameter].action}"
è la vostra DataTable popolate utilizzando una collezione annotato con @DataModel? Se è così provare ad estrarla dal contesto quando si filtra in modo che venga nuovamente richiesto.
ad es.
//In filter method
Contexts.removeFromAllContexts("yourDataModelCollection");
Mettere DataTable in un <a4j:region>
ha lavorato per me. In questo modo, è ancora possibile utilizzare i parametri di JBoss EL.