如何在 h:inputText 中将参数传递给 f:ajax? f:参数不起作用
Posted
技术标签:
【中文标题】如何在 h:inputText 中将参数传递给 f:ajax? f:参数不起作用【英文标题】:How to pass parameter to f:ajax in h:inputText? f:param does not work 【发布时间】:2012-05-10 21:27:32 【问题描述】:我需要在我的 ajax 请求中向服务器传递一个参数。请看下面的代码。 范围:查看范围
没有 f:param
<p:column >
<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 >
<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");
无法识别此代码中的不正确之处。请指导。
谢谢, 希哈
【问题讨论】:
【参考方案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);
// ...
【讨论】:
@BalusC 我在c:foreach
内以编程方式评估EL,使用迭代变量var
,但它的评估结果为null
。以上是关于如何在 h:inputText 中将参数传递给 f:ajax? f:参数不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SparkR 中将额外的参数传递给 spark.lapply?