2012-05-01 11 views
9

Muszę przekazać parametr do serwera w mojej prośbie ajaxowej. Zobacz poniższy kod. Zakres: Zobacz ZakresJak przekazać parametr do f: ajax w h: inputText? f: param nie działa

Bez f: param

<p:column width="40"> 
    <h:inputText id="originalCostInputTxt" value="#{articlePromo.costoBruto}" 
     <f:ajax event="change" 
      execute="@this" 
      listener="#{promotionDetailManagedBean.onCostoBrutoChange}"> 
     </f:ajax> 
    </h:inputText> 
</p:column> 

Managed Bean

public final void onCostoBrutoChange(final AjaxBehaviorEvent event) { 
    createCostoBrutoOptions(promoArticlesList); 
} 

W tym przypadku metoda onCostoBrutoChange() nie zostanie wywołana. Ale nie jest wywoływany, gdy dołączam f: param. Zobacz poniższy kod.

F: param

<p:column width="40"> 
    <h:inputText id="originalCostInputTxt" value="#{articlePromo.costoBruto}" 
     <f:ajax event="change" 
      execute="@this" 
      listener="#{promotionDetailManagedBean.onCostoBrutoChange}"> 
     <f:param value="#{articlePromo.promocionArticuloId}" name="myId"/> 
     </f:ajax> 
    </h:inputText> 
</p:column> 

Managed Bean

public final void onCostoBrutoChange(final AjaxBehaviorEvent event) { 
    createCostoBrutoOptions(promoArticlesList); 
    String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("myId"); 
} 

Nie stanie zidentyfikować co jest niewłaściwe w tym kodzie. Proszę przewodnika.

Dzięki Shikha

Odpowiedz

27

W <f:param> prace w linki i przyciski tylko, a nie wejść.

Jeśli środowisko obsługuje EL 2.2, po prostu przekazać go jako metoda argumentacji Zamiast:

<h:inputText ...> 
    <f:ajax listener="#{bean.listener(item.id)}" /> 
</h:inputText> 

public void listener(Long id) { 
    // ... 
} 

Można też po prostu przejść cały przedmiot:

<h:inputText ...> 
    <f:ajax listener="#{bean.listener(item)}" /> 
</h:inputText> 

public void listener(Item item) { 
    // ... 
} 

Jeśli twoje środowisko nie obsługuje lub nie może obsługiwać EL 2.2, zamiast tego oceniaj programowo EL.

public void listener() { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Long id = context.getApplication().evaluateExpressionGet(context, "#{item.id}", Long.class); 
    // ... 
} 
+0

Nie wiedziałem o tym w ten sposób ... Nice !!! – Daniel

+3

Odpowiedź od samego Boga .. :) Dzięki. Zadziałało. Nie wiedziałem o tym samym. –

+0

@BalusC Ewaluuję EL programowo wewnątrz 'c: foreach', używając zmiennej iteracji' var', ale ona zwraca wartość 'null'. – Theo