【问题标题】:How to pass parameter to f:ajax in h:inputText? f:param does not work如何在 h:inputText 中将参数传递给 f:ajax? f:参数不起作用
【发布时间】:2012-05-10 21:27:32
【问题描述】:

我需要在我的 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");
}

无法识别此代码中的不正确之处。请指导。

谢谢, 希哈

【问题讨论】:

    标签: ajax jsf input jsf-2 parameter-passing


    【解决方案1】:

    &lt;f:param&gt; 仅适用于链接和按钮,不适用于输入。

    如果您的环境支持 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);
        // ...
    }
    

    【讨论】:

    • @BalusC 我在c:foreach 内以编程方式评估EL,使用迭代变量var,但它的评估结果为null
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多