如何在h:inputText中将参数传递给f:ajax?f:param不起作用

Shi*_*wan 12 ajax jsf input parameter-passing jsf-2

我需要在我的ajax请求中将参数传递给服务器.请参阅下面的代码.范围:查看范围

没有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>
Run Code Online (Sandbox Code Playgroud)

管理Bean

public final void onCostoBrutoChange(final AjaxBehaviorEvent event) {
    createCostoBrutoOptions(promoArticlesList);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,会调用onCostoBrutoChange()方法.但是,当我包含f:param时,它不会被调用.请参阅下面的代码.

用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>
Run Code Online (Sandbox Code Playgroud)

管理Bean

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

无法识别此代码中的错误.请指导.

谢谢,Shikha

Bal*_*usC 35

<f:param>只,而不是在输入链接和按钮的作品.

如果您的环境支持EL 2.2,请将其作为方法参数传递:

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

public void listener(Long id) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

你也可以传递整个项目:

<h:inputText ...>
    <f:ajax listener="#{bean.listener(item)}" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)

public void listener(Item item) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果您的环境不支持或不支持EL 2.2,请以编程方式评估EL.

public void listener() {
    FacesContext context = FacesContext.getCurrentInstance();
    Long id = context.getApplication().evaluateExpressionGet(context, "#{item.id}", Long.class);
    // ...
}
Run Code Online (Sandbox Code Playgroud)