我需要在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>
托管豆
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"); }
无法识别此代码中的错误内容。请指导。
谢谢,Shikha
该<f:param>只,而不是在输入链接和按钮的工作原理。
<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); // ... }