How to pass parameter to f:ajax in h:inputText? f:param does not work
29,255
The <f:param>
works in links and buttons only, not in inputs.
If your environment supports EL 2.2, just pass it as method argument instead:
<h:inputText ...>
<f:ajax listener="#{bean.listener(item.id)}" />
</h:inputText>
public void listener(Long id) {
// ...
}
You can also just pass the whole item:
<h:inputText ...>
<f:ajax listener="#{bean.listener(item)}" />
</h:inputText>
public void listener(Item item) {
// ...
}
If your environment doesn't or can't support EL 2.2, then evaluate EL programmatically instead.
public void listener() {
FacesContext context = FacesContext.getCurrentInstance();
Long id = context.getApplication().evaluateExpressionGet(context, "#{item.id}", Long.class);
// ...
}
Author by
Shikha Dhawan
Working as a Software Developer New to JSF. New to Spring MVC. SOreadytohelp
Updated on December 22, 2020Comments
-
Shikha Dhawan over 3 years
I need to pass a parameter to the server in my ajax request. Please see the code below. Scope: View Scope
Without 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 this case, the method onCostoBrutoChange() does gets invoked. But, it does not get invoked when I include f:param. Please see the code below.
With 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"); }
Not able to identify whats incorrect in this code. Please guide.
Thanks, Shikha
-
Theo over 8 years@BalusC I'm evaluating EL programmatically inside
c:foreach
, using the iteration variablevar
, but it evaluates tonull
.