Passa il parametro a p: remoteCommand da JavaScript

Voglio passare il valore a remoteCommand da javascript. Se questo è ansible, come posso farlo e come posso riceverli nel backing bean?

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

Sì, è ansible. Come fare ciò dipende dalla versione di PrimeFaces. Puoi vederlo nella guida utenti di PrimeFaces . Prima di PrimeFaces versione 3.3 la syntax è la seguente (copypasted dalla guida 3.2 utenti):

3.80 RemoteCommand

Passando Parametri

Il comando remoto può inviare parametri dinamici nel modo seguente;

increment({param1:'val1', param2:'val2'});

È disponibile nel bean di supporto con i soliti mezzi. Ad esempio in un bean con scope richiesta:

 @ManagedProperty("#{param.param1}") private String param1; @ManagedProperty("#{param.param2}") private String param2; 

o nel metodo di un bean con scope più ampio:

 Map params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); String param1 = params.get("param1"); String param2 = params.get("param2"); 

Questo approccio ha tuttavia lo svantaggio di non poter specificare un singolo parametro con più valori, come ansible con i normali moduli HTML e i parametri di richiesta HTTP (che è nel mondo reale usato ad esempio per selezionare più elenchi a discesa e più gruppi di selezione).


Dal momento che PrimeFaces versione 3.3 la syntax è la seguente (copypasted dalla guida 3.3 utenti):

3.81 RemoteCommand

Passando Parametri

Il comando remoto può inviare parametri dinamici nel modo seguente;

increment([{name:'x', value:10}, {name:'y', value:20}]);

In questo modo offre la possibilità di specificare più valori su un singolo nome di parametro. I parametri con valori singoli come sopra sono disponibili allo stesso modo del vecchio modo:

 @ManagedProperty("#{param.x}") private int x; @ManagedProperty("#{param.y}") private int y; 

(nota: puoi usare Integer in Mojarra, ma non in MyFaces, questo è ulteriormente completamente non correlato a )

o nel metodo di un bean con scope più ampio:

 Map params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); int x = Integer.valueOf(params.get("x")); int y = Integer.valueOf(params.get("y")); 

Se è necessario specificare un parametro con più valori, è ansible farlo come segue:

 functionName([{name:'foo', value:'one'}, {name:'foo', value:'two'}, {name:'foo', value:'three'}]);` 

con in un bean con scope richiesta:

 @ManagedProperty("#{paramValues.foo}") private String[] foos; 

o nel metodo di un bean con scope più ampio:

 Map paramValues = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterValuesMap(); String[] foos = paramValues.get("foo"); 

Pagina:

  

JavaScript:

 command({param: 'value'}); 

Fagiolo:

 public void method() { String value = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("param"); } 

Combina il post di @BalusC @ Joel per un esempio funzionale

    
@ManagedBean public class RemoteCommandView { public void beanMethod() { // OR - retrieve values inside beanMethod String model1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("model"); String year1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("year"); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Executed", "Using RemoteCommand with parameters model := " + model + ", year := " + year)); } @ManagedProperty("#{param.model}") private String model; @ManagedProperty("#{param.year}") private int year; public void setModel(String model) { this.model = model; // value set by JSF } public void setYear(int year) { this.year = year; } }

Quando devi passare più di un parametro da javascript, la syntax è:


var param1 = ...;
var param2 = ...;
var param3 = ...;

remoteCommandFunction ([{nome: ‘param1’, valore: param1 }, {nome: ‘param2’, valore: param2 }, {nome: ‘param3’, valore: param3 }]);

Se vuoi chiamare la tua funzione, es. una finestra di conferma, la tua funzione personalizzata deve essere conforms allo stile del parametro che passa. per esempio:

   

La funzione di script java

  function confirmDelete(id) { if (confirm('Do you really want to delete?')) { remoteDeleteDemand(id); return true; } 

Il tag RemoteCommand

  

PrimeFace 5.0, array dinamico (tutta la larghezza della colonna della tabella verrà inviata con questo metodo)

Fascio

 public void updateTableColumnsWidth() { FacesContext context = FacesContext.getCurrentInstance(); Map map = context.getExternalContext().getRequestParameterMap(); } 

p: remoteCommand

    

JS