2011-09-21 9 views
14

Per passare paramters da JS per p:remoteCommand (fornito da primefaces), è possibile utilizzare questo:Come passare i parametri (da javascript) in remoteCommand (e quindi inviarlo ai bean di supporto)?

remoteCommandFunctionName({name1:'value1', name2:'value2'}); 

Dopo di che, come si fa a ricevere questo insieme di parametri in remoteCommand per inviarlo a sostenere i fagioli?

+0

La risposta qui non è aggiornata, si prega di consultare http://stackoverflow.com/a/18510102/55070 – leo

risposta

15

Se è stato definito il comando a distanza in questo modo:

<p:remoteCommand name="remoteCommandFunctionName" 
       actionListener="#{myBean.exec}"/> 

E si dispone di una chiamata al metodo JavaScript con i parametri:

remoteCommandFunctionName({name1:'value1', name2:'value2'}); 

Non è necessario specificare parametri passati al metodo Javascript chiamata in remoteCommand. Penso che avrai bisogno di questi parametri dopo tutto. È possibile utilizzare la mappa parametri di richiesta per ottenere i valori per i parametri passati nella chiamata JavaScript nel metodo supporto di fagioli:

public void exec() { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Map map = context.getExternalContext().getRequestParameterMap(); 
    String name1 = (String) map.get("name1"); 
    String name2 = (String) map.get("name2"); 
} 
+1

e in che modo si passa esattamente tali parametri di richiesta tramite javascript? –

+1

In realtà non ho trovato abbastanza informazioni sull'utilizzo dei parametri javascript passati nel backing bean. Le informazioni che sto dando qui sono legate alla mia esperienza nel lavorare con PrimeFaces remoteCommand. Possono esserci modi migliori di implementazione. – Neyko

+0

grazie verificherà se questo funziona per me –

17

spina senza vergogna la mia risposta perché mi costa ore per risolvere questo problema in primefaces 3.3. La soluzione è passare i tuoi argomenti come una matrice di {nome: < nome-param >, valore: < valore-param >}.

Come nella risposta di Neyko, l'invocazione dovrebbe essere cambiata a:

remoteCommandFunctionName([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]); 
+0

Funziona ora con le primitive 3.4.2. Migrazione da 3.2 a 3.4.2 e interruzione dell'invocazione. Anche la risposta di Neyko dovrebbe essere aggiornata. – Vivek

+0

Sì, sono contento di aver letto di più e di aver ottenuto questo commento. –

+0

@instcode ha la risposta giusta e se (come me) non l'hai capito la prima volta, cerchiamo di essere più espliciti: devi scrivere testualmente "nome:" e "valore:" perché sono parole chiave. Non puoi sostituire il nome: con il tuo nome personalizzato (nome1, ad esempio ...). Naturalmente, ciò che va bene del colon può essere una variabile js o una 'costante'. Grazie ancora! Tu risolvi il mio problema! –

6

Ho provato le soluzioni precedenti con primefaces 4.0 ma non ha funzionato per me.

Così come una soluzione ho dovuto mettere un <h:inputHidden> e impostare il valore a una proprietà di un ManagedBean, e poco prima di chiamare la <p:remoteCommand> ho impostato il valore di questo h: inputHidden (usando jQuery) e chiamare il p: remoteCommand (con assicurandosi il comando remoto sta elaborando l'h: inputHidden)

FormBean.java

@ManagedBean(name = "formBean") 
@ViewScoped 
public class FormBean { 

    private String myValue; 

    public String getMyValue() { 
    return myValue; 
    } 

    public void setMyValue(String myValue) { 
     this.myValue = myValue; 
    } 

    public void remoteAction() { 
    someAction(myValue); 
    } 

} 

form.xhtml

..... 
<p:remoteCommand name="remoteAction" actionListener="#{formBean.remoteAction()}" process="@this myValueHidden" /> 

<h:inputHidden id="myValueHidden" value="#{formBean.myValue}" /> 
..... 

form.js

function onClickOfSomeButton() { 
$('#formName\\:myValueHidden').val('myValue test value'); 
    remoteAction(); 
} 

EDIT

Anche questo funziona perfettamente ..

remoteAction([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]); 

Spero che questo aiuti ...

9

soluzione da instcode lavora in primefaces 4,0

xhtml

<p:remoteCommand name="remoteCommandFunctionName" actionListener="#{myBean.exec}"/> 

Bean

public void exec() { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Map map = context.getExternalContext().getRequestParameterMap(); 
    String name1 = (String) map.get("name1"); 
    String name2 = (String) map.get("name2"); 
} 

JavaScript

remoteCommandFunctionName([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]); 
Problemi correlati