当前位置: 首页 > 面试题库 >

将其他参数发送到Ajax事件侦听器

阎宝
2023-03-14
问题内容

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

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

模板

<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自定义操作实例(…)。如果关联的组件已经具有使用该名称的组件属性,则不执行任何操作。否则,请isLiteralText()在参数上调用方法value。如果返回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");
  // ...
}


 类似资料:
  • 问题内容: 现在,我的问题是尝试在编辑该行时发送该行的ID()。 例如,我有一个带有列userid(),username(),firstname(),lastname()的网格。在编辑行时,网格仅发送参数用户名,名字和姓氏。在服务器端,我需要用户ID知道我已将哪些新值应用于这些用户。 editUrl看起来像: 谢谢 这是完整的代码: 问题答案: 您可以使用 (ID)列的定义中。该参数当前不是真正需

  • 问题内容: 我需要在购物车中构建一个功能,该功能在发生某些更改(例如,产品被删除)时使用AJAX从服务器中检索模板的更新副本。我无法修改服务器端代码,也无法修改使购物车首先运行的JavaScript。(我知道这并不理想,但事实就是如此) 我想做的是每次购物车更新时都运行自己的JavaScript。 我想知道是否可以侦听AJAX调用 ,并在每次生成代码时运行我的代码。 问题答案: 要跟踪HTML文档

  • 有没有办法防止事件链中的一些听众为事件开火,但允许链上的其他人开火? 比如我有这个结构 假设我已经将单击事件监听器连接到body、div#1和div#2。是否有可能在div#2事件监听器上阻止事件进入div#1或介于两者之间的任何其他监听器,并允许事件在body元素上触发? 我这样说是因为我使用谷歌地图和emberjs构建了一系列可以在地图上显示的交互式信息框。问题是ember将事件侦听器附加到b

  • 我通过infinispan缓存添加了CacheEntryExpired侦听器的n实现。addListener()方法。 侦听器事件在条目过期时激发。问题是,每次事件触发两次。 我验证(使用调试器和cache.getListeners())缓存不包含我的同一个侦听器的两个实例。getListeners的结果是: 所以只有一个听众。侦听器实现接口: 一个实现看起来像: 但是从接口中删除@CacheEn

  • 问题内容: 这个问题是密切相关的这一个(已回答)。 在整个项目中,我使用JSF命令按钮在屏幕之间导航,其中action属性将指向返回字符串的函数。字符串是新屏幕的名称,例如 将返回一个字符串,例如,它将引导用户 出于移动目的,我不得不使用ajax调用来使clickable,例如 这有效,我已经测试过了,并且返回了正确的结果(在返回之前测试并记录了它) 但是,没有重定向发生。Ajax调用尚未完成。如

  • 这个问题与这个问题密切相关(已回答)。 在整个项目中,我使用JSF命令按钮在屏幕之间导航,其中action属性将指向返回字符串的函数。字符串是新屏幕的名称,例如。 将返回一个字符串,例如,它将用户引导到 出于移动目的,我必须使用ajax调用使panelGrid可点击,例如。 这个工作原理,我已经测试过了,并返回了正确的结果(在返回之前记录它进行了测试) 但是,没有重定向发生。ajax调用还没有做到