Passar parâmetro para p: remoteCommand from JavaScript

Eu quero passar valor para o remoteCommand de javascript. Se isso for possível, como posso fazer isso e como posso recebê-los no bean de apoio?

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

Sim, é possível. Como fazer isso depende da versão do PrimeFaces. Você pode vê-lo no guia de usuários do PrimeFaces . Antes do PrimeFaces versão 3.3 a syntax é a seguinte (copypasted do guia de 3.2 usuários):

3,80 Comando Remoto

Passando parameters

O comando remoto pode enviar parâmetros dynamics da seguinte maneira;

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

Está disponível no backing bean por meios usuais. Por exemplo, em um bean com escopo de solicitação:

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

ou no método de um bean com escopo mais amplo:

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

Essa abordagem teve a desvantagem de não ser possível especificar um único parâmetro com vários valores, como possível, com formulários HTML normais e parâmetros de solicitação HTTP (que são usados ​​no mundo real, por exemplo, dropdownlist de várias seleções e vários grupos de checkboxs de seleção).


Desde PrimeFaces versão 3.3 a syntax é a seguinte (copypasted do guia de 3.3 usuários):

3,81 Comando Remoto

Passando parameters

O comando remoto pode enviar parâmetros dynamics da seguinte maneira;

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

Desta forma, oferece a possibilidade de especificar vários valores em um único nome de parâmetro. parameters com valores únicos como acima estão disponíveis da mesma forma que o antigo:

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

(nota: você pode usar Integer em Mojarra, mas não em MyFaces, isso é completamente não relacionado a )

ou no método de um bean com escopo mais amplo:

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

Se você precisar especificar um parâmetro com vários valores, poderá fazê-lo da seguinte maneira:

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

com em um bean com escopo de solicitação:

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

ou no método de um bean com escopo mais amplo:

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

Página:

  

JavaScript:

 command({param: 'value'}); 

Feijão:

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

Combine a postagem de @BalusC @ Joel como um exemplo funcional

    
@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 você precisa passar mais de um parâmetro do javascript, a syntax é:


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

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

Se você quiser chamar sua própria function, por exemplo. um diálogo de confirmação, sua function personalizada deve ser compatível com o estilo de parâmetro de passagem. por exemplo:

   

A function de script java

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

A tag remoteCommand

  

PrimeFace 5.0, matriz dinâmica (toda a largura da coluna da tabela será enviada por este método)

Feixe

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

p: remoteCommand

    

JS