如何将参数值传递给 a4j:jsFunction

Posted

技术标签:

【中文标题】如何将参数值传递给 a4j:jsFunction【英文标题】:How to pass a parameter value to a4j:jsFunction 【发布时间】:2012-01-31 21:19:21 【问题描述】:

在我的页面上,我有一个按钮,可以在弹出窗口中打开项目列表。当我在列表中选择一个项目时,我想将项目的 id 传递给我的第一页的 backingbean。可能吗?它试图用a4j:jsFunctiona4j:param 来做到这一点,但它不起作用。

这是我的代码:

第 1 页:

<a4j:jsFunction name="renderGuarantor" render="guarantor" actionListener="#prospectDetail.setNewGuarantor">
  <a4j:param name="param1" assignTo="#prospectDetail.newGuarantorId" />  
</a4j:jsFunction>

弹出页面:

<h:outputLink value="" onclick="window.opener.renderGuarantor(#applicant.deposit_id);window.close();">
  <h:graphicImage style="padding:0 1px; border:0"  value="$path.staticRootUrlimages/confirm.gif"   title="$msg.applicantslist_select"/>
</h:outputLink>

这是第一页的支持 bean 代码

private Integer newGuarantorId;
public void setNewGuarantor()  
    guarantor = newGuarantorId;


public Integer getNewGuarantorId() 
    return newGuarantorId;


public void setNewGuarantorId(Integer newGuarantorId) 
    this.newGuarantorId = newGuarantorId;

在弹出窗口中选择时,我的 backingbean 中的方法被调用,但 newGuarantorId 为 null 并且永远不会调用 setNewGuarantorId

我的问题有解决方案吗?

【问题讨论】:

您确定#applicant.deposit_id 在新窗口中不为空吗? 是的,它填写了正确的 id。 嗯..这很奇怪,看起来没什么问题..不是您的问题的答案,但请尝试此解决方法 - 不要将值分配给 guarantorId,而是将参数保留为 &lt;a4j:param name="param1"/&gt; 并在actionListener 方法将此 param1 从请求中检索为 String param1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("param1");。然后将此参数转换为int 并进一步利用它。那应该可以。 太棒了! :) 把它作为答案放在下面。如果它是您问题的答案,请标记它 【参考方案1】:

嗯..这很奇怪,看起来没什么问题..不是您的问题的答案,但请尝试此解决方法 - 不要将值分配给 guarantorId,而是将参数保留为 &lt;a4j:param name="param1"/&gt; 并在 actionListener 方法中检索此参数 1来自String param1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().‌​get("param1"); 的请求。 然后将此参数转换为 int 并进一步利用它。应该可以的

【讨论】:

【参考方案2】:

尝试从actionListener切换到action

<a4j:jsFunction name="renderGuarantor" render="guarantor" action="#prospectDetail.setNewGuarantor">
  <a4j:param name="param1" assignTo="#prospectDetail.newGuarantorId"/>  
</a4j:jsFunction>

这里推荐阅读主题:a4j:jsFunction

【讨论】:

【参考方案3】:

我想你可以试试这个:

<a4j:jsFunction name="renderGuarantor" render="guarantor" 
                actionListener="#prospectDetail.setNewGuarantor(prospectDetail.newGuarantorId)" />

在您的托管 bean 中,定义 setNewGuarantor 方法如下:

public void setNewGuarantor(int newGuarantorId)  
   guarantor = newGuarantorId;

【讨论】:

以上是关于如何将参数值传递给 a4j:jsFunction的主要内容,如果未能解决你的问题,请参考以下文章

JSF子页面每次都保留上次的数据,需要手动刷新一下, 该如何解决?

VB中过程调用时有几种参数传递方式,说明其区别

操作系统中用户程序的参数是如何传递给程序的

弄懂Java为何只有值传递

在C语言中,定义一个函数的形参和实参之间具体是如何进行参数传递的?

为什么Java只有值传递?