Как передать параметр в f:ajax в h:inputText? f:param не работает

Мне нужно передать параметр на сервер в моем запросе ajax. Пожалуйста, смотрите код ниже. Scope: View Scope

Без 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>

Управляемый Боб

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>

Управляемый Боб

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

Не удалось определить, что неверно в этом коде. Пожалуйста, руководство.

Спасибо, Шиха

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);
    // ...
}
Другие вопросы по тегам