如何传递参数到f:阿贾克斯在H:inputText的? F:PARAM不起作用(How to p

2019-06-24 02:28发布

我需要传递参数给服务器在我的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>

Managed Bean的

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

在这种情况下,方法onCostoBrutoChange()不会被调用。 PARAM:但是,它不会,当我包括F调用。 请参阅下面的代码。

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

无法确定这个代码什么不正确。 请指导。

谢谢,Kshik

Answer 1:

所述<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);
    // ...
}


文章来源: How to pass parameter to f:ajax in h:inputText? f:param does not work