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

标签 ajax jsf input jsf-2 parameter-passing

我需要在我的 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>

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

在这种情况下,方法 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>

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

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

谢谢,
什哈

最佳答案

<f:param>仅适用于链接和按钮,不适用于输入。

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

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

您也可以只传递整个项目:
<h:inputText ...>
    <f:ajax listener="#{bean.listener(item)}" />
</h:inputText>
public void listener(Item item) {
    // ...
}

如果您的环境不支持或不能支持 EL 2.2,则改为以编程方式评估 EL。
public void listener() {
    FacesContext context = FacesContext.getCurrentInstance();
    Long id = context.getApplication().evaluateExpressionGet(context, "#{item.id}", Long.class);
    // ...
}

关于ajax - 如何将参数传递给 f :ajax in h:inputText? f:param 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10396244/

相关文章:

python - 以编程方式中断 raw_input

c++ getline 分隔符为任意数字?

html - 如何在 Bootstrap 中以表格形式居中输入?

javascript - ajax:beforeSend 在任何 ajax 调用上被触发

javascript - jquery ajax php/mysql - 使用 _POST 方法的简单注册表单

jsf - 创建自定义 JSF 组件时 `<component-family>` 和 `<renderer-type>` 的命名约定

JSF 2.0 Primefaces 关闭复合组件中的对话框

jquery - 如何使用 jQuery 在 <select></select> 标签中选择一个选项?

javascript - 在窗口卸载事件上发送发布请求(AJAX 请求与表单提交与图像请求)

java - JSF 2.0 使用 Eclipse?