2012-05-01 13 views
9

Ho bisogno di passare un parametro al server nella mia richiesta Ajax. Si prega di consultare il codice qui sotto. Ambito: vista oscilloscopioCome passare il parametro a f: ajax in h: inputText? f: param non funziona

Senza 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); 
} 

In questo caso, il metodo onCostoBrutoChange() non viene invocato. Ma, non viene invocato quando includo f: param. Si prega di consultare il codice qui sotto.

Con 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"); 
} 

Non in grado di identificare che cosa è errato in questo codice. Per favore guida.

Grazie, Shikha

risposta

27

I <f:param> opere nel link e pulsanti solo, non in input.

Se l'ambiente supporta EL 2.2, basta passare come metodo di discussione, invece:

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

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

si può anche solo passare l'intero articolo:

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

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

Se l'ambiente non supporta o non supporta l'EL 2.2, valutare invece EL in modo programmatico.

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

Non era a conoscenza di questo modo ... Bello !!! – Daniel

+3

Risposta dal Dio stesso .. :) Grazie. Ha funzionato. Non ero a conoscenza dello stesso. –

+0

@BalusC Sto valutando EL in modo programmatico all'interno di 'c: foreach', usando la variabile di iterazione' var', ma valuta 'null'. – Theo

Problemi correlati