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>
はリンクとボタンでのみ機能し、入力では機能しません。
ご使用の環境がEL2.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) {
// ...
}
ご使用の環境がEL2.2をサポートしていない、またはサポートできない場合は、代わりにプログラムでELを評価してください。
public void listener() {
FacesContext context = FacesContext.getCurrentInstance();
Long id = context.getApplication().evaluateExpressionGet(context, "#{item.id}", Long.class);
// ...
}