Как передать параметр в 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);
// ...
}