16

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

このコードで何が間違っているかを特定できません。ガイドしてください。

ありがとう、シカ

4

1 に答える 1

39

<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);
    // ...
}
于 2012-05-01T13:05:17.813 に答える