为所有下拉菜单调用值更改侦听器,而不仅仅是当前的

2024-02-09

我正在使用 MyFaces 1.1。我有两个<h:selectOneMenu>每个都指向相同的下拉菜单valueChangeListener method.

<h:selectOneMenu id="d1" value="#{mybean.selectedChannel1}" 
    onchange="submit()" valueChangeListener="#{myform.channelValuechange}">
    <f:selectItems value="#{mybean.channelList}"/>
</h:selectOneMenu>

<h:selectOneMenu id="d2" value="#{mybean.selectedChannel2}"
    onchange="submit()" valueChangeListener="#{myform.channelValuechange}">
    <f:selectItems value="#{mybean.channelList}"/>
</h:selectOneMenu>

当我更改第一个下拉列表时,值更改侦听器方法会正确触发。在该方法中,我获取当前组件的 ID,如下所示sourceId via ValueChangeEvent论证,然后比较如下:

if (sourceId.equals("d1")) {
    // ...
} else if (sourceId.equals("d2")) {
    // ...
}

然而,我的具体问题是d2块也被调用时d1被改变了。

我尝试了其中一种,并认为以下有助于解决问题:

if (!event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {
      event.setPhaseId(PhaseId.INVOKE_APPLICATION);
      event.queue();
}

但是,我不认为这是最好的解决方案。这是如何引起的以及如何在不使用上述代码的情况下解决它?


With onchange="submit()"你基本上是在提交entire当当前输入元素改变时,表单不仅仅是当前改变的输入!与许多初学者的错误想法相反,这里没有任何特定于输入的 JavaScript/Ajax 魔法。当您提交整个表单时,它将触发以下处理all输入组件。

The valueChangeListener is always当输入组件的提交值不存在时调用equals()支持 bean 中的初始模型值。鉴于在您的情况下,当您仅更改第一个菜单时,两个菜单都会命中值更改侦听器,这只能意味着第二个菜单的默认选择项值不会equals()支持 bean 中的初始模型值。

你需要确保#{mybean.selectedChannel2}第二个菜单的默认有exactly与第一项的值相同#{mybean.channelList}第二个菜单的列表。这样,当您更改第一个菜单时,不会为第二个菜单调用值更改侦听器。

也可以看看:

  • 何时使用 valueChangeListener 或 f:ajax 监听器? https://stackoverflow.com/questions/11879138/when-to-use-valuechangelistener-or-fajax-listener/11883021#11883021(只是为了了解 JSF 2 中的不同之处,对于您感兴趣的情况)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为所有下拉菜单调用值更改侦听器,而不仅仅是当前的 的相关文章

随机推荐

  • 选择 Atom 中所有找到的 RegEx 结果

    我正在尝试选择正则表达式查找找到的所有结果 以便我可以全部修改它们 不要用文本替换它们 例如 将它们全部大写Cmd K gt Cmd U 我知道我could通过重复来一项一项地做Cmd G Cmd K Cmd U 但对于大文件来说 这根本不
  • Laravel 4 绕过路由的维护模式

    我已将我的应用程序放下以进行维护php artisan down命令 我的自定义维护页面作为电子邮件输入 用于接受来自用户的电子邮件并存储在我的数据库中 以便在站点备份并再次运行时通知用户 但是当我使用 POST 提交表单时 我被重定向到维
  • mViewPager.getCurrentItem() 不返回第一个和最后一个寻呼机的正确位置

    我正在尝试获取视图寻呼机的页码 我遇到了很多Stackoverflow Q A 他们都说要使用 currentposition mViewPager getCurrentItem 但此方法不适用于第一页和最后一页 如何解决这个问题 提前致谢
  • 运行 Hadoop 作业时不是有效的 Jar

    我想运行 WordCount 示例 在eclipse中运行正确 在输出文件夹中存在输出文件 我制作了WordCount的jar文件并想通过命令运行它 hadoop jar WordCount jar Projects input Proje
  • 使用index.js在React中导入多个图像资源

    我一直在使用一种收集组件文件以供导出的模式index js文件放置在目录中 例如 index js file in components directory export Splash from Splash export Portfoli
  • 使用 Spring Boot 重命名 Liquibase 变更日志表

    我在用着Liquibase v 3 5 3 和 一起Spring 启动 v 1 5 3 我想使用 spring boot 属性文件更改 liquibase 变更日志表名称 我发现做到这一点的唯一方法是设置liquibase database
  • 找到具有相同权重的最大边数的生成树

    问题就在这里 给出一个带权无向连通图G 权重是恒定的 任务是提出一种算法 找到满足这两个条件的 G 的生成树的总权重 按优先级排序 生成树必须有相同权重的最大边数 与实际重复重量值无关 应最小化总生成树重量 这意味着 例如 权重为 120
  • 为什么.NET不验证BCL/CLR?

    BCL 和 CLR 中的所有 NET 程序集 以后仅使用 CLR 都是强命名和数字签名 https stackoverflow com questions 1334631 signing of net assemblies 提供数字证书是为
  • AngularJS,防止在茉莉花测试期间启动控制器上的 init 方法

    我有一个带有在实例化时启动的 init 方法的控制器 它做了很多对我的应用程序在实时环境中有用的事情 但这会扰乱我的单元测试间谍 在单元测试环境中实例化控制器时 有没有办法阻止它的调用 或者也许有一种方法可以在 web 应用程序上下文中自动
  • 这个R符号是什么意思?

    我将主题模型的文本上传到第四列 但显示的不是文本 而是此符号 当我将鼠标悬停在它上面时 我可以阅读文本 但是 我想确保这个符号不会误导我的结构主题模型分析 谢谢你 我刚刚运行主题模型没有问题 我认为这个符号表明单元格包含大文本 例如 几页单
  • R 将 RSelenium 驱动程序环境作为函数参数传递

    我可能没有看到明显的东西 无论如何我想创建函数来自动从远程驱动程序已处理的 URL 中提取文本 我想将 xpath 表达式和可以找到远程驱动程序的环境作为函数参数传递 library RSelenium url http stackover
  • ActiveMQ:如何使旧消息出队?

    我正在学习如何使用ActiveMQ 现在我们面临以下问题 假设我在 ActiveMQ 上有一个名为 topic test 的主题 它有两个订阅者 在特定时刻 我只有一个订阅者在等待消息 而生产者则为我上面提到的主题发送一条消息 好的 连接的
  • 没有模块前缀路由路径的 Rails 名称范围模型对象

    我对 Rails 路由器和表单生成器有一点问题 我的应用程序具有用于模型和控制器的命名空间模块 模块用于更轻松地抽象到另一个项目 我用在routes rb范围方法而不是命名空间 因为我不想有 丑陋 的路径助手 看起来像 scope modu
  • 如何使用 scrapy.Request 将另一个页面的元素加载到项目中

    我使用 Scrapy 创建了一个网络抓取工具 它能够从每张票证中抓取元素website http www vividseats com concerts awolnation tickets html但无法刮掉票价 因为页面上没有该票价 当
  • 如何将预先填充的 Default.realm 文件加载到设备上?

    我有一个领域文件 其中已填充了在设备上加载应用程序时需要的数据 我可以做什么来将领域文件获取到我的设备上进行测试 以及当有人从应用程序商店下载应用程序时 我需要做什么来确保它已经存在 我正在使用斯威夫特 Add your database
  • Intellij 14.1.4 CE spring boot 1.3.0.M1,spring-dev-tools 热重载不起作用

    刚刚使用 spring 初始化程序和 spring dev tools 启动了一个 spring boot 应用程序 然后导入到 Intellij 14 1 4 CE 中 我可以使用 gradle 很好地运行应用程序bootRun但无法使热
  • javascript图像覆盖在指定的div上

    我是 JavaScript 新手 实际上很新 这应该是我的第一个脚本 谁能向我解释如何在任何指定的固定宽度区域 例如 700x300px 上制作透明叠加层 您可以定义覆盖 例如 div class myoverlay contents di
  • 如何在高空照片中高效找到地平线?

    我试图检测从高空拍摄的图像中的地平线 以确定相机的方向 我也试图让它运行得更快 理想情况下 我希望能够在 Raspberry Pi 上实时处理帧 即每秒几帧 到目前为止我所采取的方法是基于这样一个事实 在高海拔地区 天空非常暗 如下所示 我
  • 通过 Comma IDE 使用时间轴可视化时出现“无法获取时间轴数据”

    执行答案后这个问题是关于如何设置时间可视化脚本 https stackoverflow com questions 58428899 do we need to modify a script to be able to use the t
  • 为所有下拉菜单调用值更改侦听器,而不仅仅是当前的

    我正在使用 MyFaces 1 1 我有两个