2011-09-21 37 views
14

Para pasar parametros de JS para p:remoteCommand (proporcionada por PrimeFaces), puede utilizar esto:¿Cómo se pasan los parámetros (desde javascript) a remoteCommand (y luego se lo envía a los beans de respaldo)?

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

Después de eso, ¿cómo recibir este conjunto de parámetros en remoteCommand para enviarlo a realizar copias de frijoles?

+0

La respuesta aquí está desactualizada, vea http://stackoverflow.com/a/18510102/55070 – leo

Respuesta

15

Si ha definido mando a distancia de esta manera:

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

Y usted tiene un método llamado Javascript con los parámetros:

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

No es necesario especificar los parámetros pasados ​​a Javascript llamada al método en remoteCommand. Creo que necesitarás estos parámetros en el respaldo después de todo. Usted puede utilizar el mapa parámetros de la petición para obtener los valores de los parámetros pasados ​​en la llamada de JavaScript en el método de bean de respaldo:

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

y cómo pasa exactamente esos parámetros de solicitud a través de javascript? –

+1

En realidad, no he encontrado suficiente información sobre el uso de los parámetros pasados ​​por Javascript en el bean de respaldo. La información que proporciono aquí está relacionada con mi experiencia al trabajar con PrimeFaces remoteCommand. Puede haber mejores formas de implementación. – Neyko

+0

thanks probará si esto funciona para mí –

17

enchufe Desvergonzadamente mi respuesta porque me cuesta horas para resolver este problema en primefaces 3.3. La solución es pasar sus argumentos como una matriz de {nombre: < param-name >, valor: < param-value >}.

Al igual que en la respuesta de Neyko, la invocación se debe cambiar a:

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

Funciona en primfaces 3.4.2 ahora. Migrado de 3.2 a 3.4.2 y la invocación detenida. La respuesta de Neyko también debe actualizarse. – Vivek

+0

Sí, estoy contento de haber leído más a fondo y haber llegado a este comentario. –

+0

@instcode tiene la respuesta correcta y si (como yo) no lo entendiste la primera vez, seamos más explícitos: debes escribir textualmente "nombre:" y "valor:" porque son palabras clave. No puede reemplazar el nombre: con su nombre personalizado (nombre1, por ejemplo ...). Por supuesto, lo que va bien en el colon puede ser una variable js o una 'constante'. ¡Gracias de nuevo! ¡Tú resuelves mi problema! –

6

probé las soluciones anteriores con PrimeFaces 4.0 pero no funcionó para mí.

Así como una solución que tenía que poner un <h:inputHidden> y establecer el valor de una propiedad de un ManagedBean, y justo antes de llamar al <p:remoteCommand> fijo el valor de este h: inputHidden (usando jQuery) y llame a la t: remoteCommand (con asegurarse de que el comando a distancia está procesando la 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(); 
} 

EDITAR

También este funciona perfectamente ..

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

Espero que esto ayude ...

9

Solución de INSTCODE trabaja en PrimeFaces 4.0

XHTML

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

frijol

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'}]); 
Cuestiones relacionadas