2011-09-21 12 views
14

Na przejściu paramters z JS do p:remoteCommand (dostarczonych przez primefaces), można użyć tego:W jaki sposób przekazujesz parametry (z javascript) do remoteCommand (a następnie przesyłasz je do komponentów bean)?

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

Po tym, jak można otrzymać ten zestaw parametrów w remoteCommand za wysłanie go do tworzenia kopii fasolę?

+0

Odpowiedź tutaj jest nieaktualna, zobacz http://stackoverflow.com/a/18510102/55070 – leo

Odpowiedz

15

Jeśli zdefiniowano polecenia zdalnego tak:

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

i masz metodę JavaScript połączenia z parametrami:

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

Nie należy określić parametry przekazane do metody wywołania Javascript do remoteCommand. Myślę, że będziesz potrzebował tych parametrów na zapleczu. Możesz korzystać z mapy, parametry żądania w celu uzyskania wartości parametrów przekazywanych do wywołania JavaScript w metodzie podkład fasoli:

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

i jak dokładnie przekazujesz te parametry żądania przez javascript? –

+1

Właściwie nie znalazłem wystarczającej ilości informacji o używaniu parametrów przekazanych javascript do komponentu bean. Informacje, które tutaj podaję, odnoszą się do mojego doświadczenia w pracy z poleceniem PrimeFaces remoteCommand. Być może istnieją lepsze sposoby realizacji. – Neyko

+0

dziękuję sprawdzi, czy to działa dla mnie –

17

Bezwstydnie podłączyć moją odpowiedź, ponieważ kosztuje mnie godziny, aby rozwiązać ten problem w PrimeFace 3.3. Rozwiązaniem jest przekazanie argumentów jako tablicy o nazwie {nazwa: < nazwa parametru >, wartość: < wartość parametru >}.

As w odpowiedzi Neyko, tym inwokacja powinny być zmienione na:

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

Działa w primfaces 3.4.2 teraz. Przeprowadzono migrację z wersji 3.2 do wersji 3.4.2 i zatrzymano wywoływanie. Odpowiedź Neyko również powinna zostać zaktualizowana. – Vivek

+0

Tak, cieszę się, że przeczytałem dalej i dostałem ten komentarz. –

+0

@instcode ma poprawną odpowiedź i jeśli (tak jak ja) nie zrozumiałeś go za pierwszym razem, powiedzmy wyraźnie: musisz napisać tekst "name:" i "value:", ponieważ są to słowa kluczowe. Nie można zastąpić nazwy: niestandardową nazwą (np. Nazwa 1, na przykład ...). Oczywiście, po prawej stronie okrężnicy może być zmienna js lub "stała". Dzięki jeszcze raz! Rozwiązujesz mój problem! –

6

Próbowałem dotychczasowe rozwiązania z primefaces 4,0, ale nie dla mnie.

Więc jako obejście musiałem położyć <h:inputHidden> i ustawić wartość na własność ManagedBean, i tuż przed wywołaniem <p:remoteCommand> ustawić wartość tego H: inputHidden (jQuery) i wywołać t: remoteCommand (przy upewnieniu się, że polecenia zdalnego przetwarzania 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

Również ten działa idealnie ..

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

Nadzieja to pomaga ...

9

Rozwiązanie z instcode pracuje w 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'}]); 
Powiązane problemy