【问题标题】:Add additional parameter to JSF Ajax event listener向 Ajax 事件监听器发送附加参数
【发布时间】:2017-01-01 18:52:53
【问题描述】:

我有一个应该重定向到项目视图页面的 ajax 侦听器。 但是,由于我使用泛型类型作为模型,我想在我的公共数据表控制器中另外指定带有第二个参数的视图是什么。

不幸的是,您可以在两种侦听器方法之间进行选择,一种使用 event 参数来帮助识别对象,而第二种方法使您有机会发送 free param 但缺少事件.

模板

<p:dataTable value="#{aObj.objList}" var="item" ... selectionMode="single">
              
  <p:ajax event="rowSelect" listener="#{aObj.viewItem}" />
  <p:ajax event="rowSelect" listener="#{aObj.viewItem('myItemView?_id=')}" />

  ...
</p:dataTable>

控制器

public void viewItem(SelectEvent event) {
  // ...
}
    
public void viewItem(String viewUrl) {
  // ...
}

我可以为 bean 添加额外的属性,但由于它是通用的,并且提供模型项不会污染它。

有什么解决办法吗?

【问题讨论】:

  • 您可以设置一个f:attribute 并在事件监听器中读取它。
  • @JasperdeVries 怎么读的? &lt;p:ajax ...&gt;&lt;f:attribute name="test" value="abc" /&gt;&lt;/p:ajax&gt; 在 ajax 请求中也没有在事件中看到该属性的任何痕迹。
  • 相关线程:forum.primefaces.org/viewtopic.php?t=37824 它对我有用 p:inputtext+f:param+p:ajax。

标签: ajax jsf primefaces parameters


【解决方案1】:

您可以在数据表中设置一个属性并在您的选择侦听器中读取它。为此,请使用&lt;f:attribute name="..." value="..."/&gt;。来自documentation

约束

必须嵌套在 UIComponent 自定义操作中。

说明

找到最近的父 UIComponent 自定义操作实例 (...)。如果关联的组件已经有一个组件 具有该名称的属性,不采取任何行动。否则,对参数value 调用isLiteralText() 方法。如果它 返回true,将值存储在上面派生的名称下的组件属性Map中。如果返回false,则存储 组件的ValueExpression 映射中的ValueExpression 在上面派生的名称下。

因此,采用您尝试在评论中设置的属性,您应该像这样使用它:

XHTML:

<p:dataTable value="#{aObj.objList}" var="item" .... selectionMode="single">

  <f:attribute name="test" value="abc" />
  <p:ajax event="rowSelect" listener="#{aObj.viewItem}" />

  ...
</p:dataTable>

听众:

public void viewItem(SelectEvent event) {
  String test = (String) event.getComponent().getAttributes().get("test");
  // ...
}

【讨论】:

    【解决方案2】:

    当您想添加特定于ajax 标签的请求参数时,您可以在onstart 方法处进行:

    <p:ajax onstart="cfg.ext.params.push({name: 'name', value: 'value'});"/>
    

    通常,您应该使用模型求解参数。

    【讨论】:

    • 哦?从来没有这个新的。这适用于哪些 PF 版本?
    • 这至少从 5.0 开始工作,也许你必须添加 cfg.ext = {params: []}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多