2012-05-01 6 views
9

Ich muss einen Parameter an den Server in meiner Ajax-Anfrage übergeben. Bitte beachten Sie den folgenden Code. Scope: Ansicht ScopeWie übergeben Sie den Parameter an f: ajax in h: inputText? f: param funktioniert nicht

Ohne 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 diesem Fall wird die Methode onCostoBrutoChange() nicht wird aufgerufen. Aber es wird nicht aufgerufen, wenn ich f: param einschließe. Bitte beachten Sie den folgenden Code.

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

nicht in der Lage, was ist falsch in diesem Code zu identifizieren. Bitte führen. nur

Danke, Shikha

Antwort

27

Die <f:param> Werke in Links und Schaltflächen, nicht in Eingaben.

Wenn Ihre Umgebung unterstützt EL 2.2, gibt ihnen nur als Methode Argument statt:

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

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

Sie können auch passieren einfach den ganzen Artikel:

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

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

Wenn Ihre Umgebung EL 2.2 nicht unterstützt oder nicht unterstützt, dann evaluieren Sie EL programmgesteuert.

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

War mir nicht bewusst ... Schön !!! – Daniel

+3

Antwort von Gott selbst .. :) Danke. Es funktionierte. Mir war das nicht bewusst. –

+0

@BalusC Ich evaluiere EL programmatisch in 'c: foreach', benutze die Iterationsvariable' var', aber es wird zu 'null' ausgewertet. – Theo

Verwandte Themen