向JSF Ajax事件侦听器添加附加参数



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

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

:

<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 name="..." value="..."/>。来自文档:

的约束

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

描述

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

所以,使用你试图在评论中设置的属性,你应该像这样使用它:

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

当您想要添加特定于ajax标记的请求参数时,您可以在onstart方法中执行:

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

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

相关内容

  • 没有找到相关文章

最新更新