Jsp 2 tr:selectOneChoice值更改侦听器调用相同的操作方法

Jsp 2 tr:selectOneChoice值更改侦听器调用相同的操作方法,jsp,jsf,facelets,jspx,trinidad,Jsp,Jsf,Facelets,Jspx,Trinidad,我有两个tr:selectOneChoice组件,每个组件都有自己的valueChangeListener方法。问题是,当更改下拉框1中的值时,它将调用预期的操作方法1 但是当改变下拉框2中的值时,它会依次调用action方法1和action方法2,这很奇怪,它根本不应该调用action方法1。最糟糕的是,即使我点击同一页面上的不同按钮,它们也会依次调用两种操作方法,这真的很糟糕,我不知道如何解释 我在用我的脸,小脸蛋,特立尼达。多谢各位 只有当提交的值与相关getter在验证阶段返回的值不同时

我有两个tr:selectOneChoice组件,每个组件都有自己的valueChangeListener方法。问题是,当更改下拉框1中的值时,它将调用预期的操作方法1

但是当改变下拉框2中的值时,它会依次调用action方法1和action方法2,这很奇怪,它根本不应该调用action方法1。最糟糕的是,即使我点击同一页面上的不同按钮,它们也会依次调用两种操作方法,这真的很糟糕,我不知道如何解释


我在用我的脸,小脸蛋,特立尼达。多谢各位

只有当提交的值与相关getter在验证阶段返回的值不同时,才会调用
valueChangeListener
。您的特定问题最常见的原因之一是bean是请求范围的,并且初始值没有被保留

如果您使用的是JSF2.0,那么需要将bean放在
视图
范围内,以便它将保留在同一视图上的直接后续请求中。但是当您仍然使用1.x时,最简单的修复方法是将bean放入会话范围。然而,这也有一些警告;当用户在同一浏览器会话的不同选项卡/窗口中打开同一页面时,它们将相互干扰。最好的解决办法是使用战斧的。在带有下拉列表的表单页面中的某个位置放置以下行:

<t:saveState value="#{bean}" />


这样,bean将保留在同一视图上的后续请求中,其行为类似于新的JSF 2.0
view
scope。

Hi,非常感谢您的快速响应。我理解为什么我的值改变了被调用的侦听器方法,但它应该只调用自己的方法,当然不能以相同的顺序调用其他值改变的侦听器方法。更糟糕的是,当我在同一页面上单击我的按钮(与那些值更改侦听器无关)时,这些按钮以相同的顺序调用我的值更改侦听器方法和它自己的操作方法。我使用的是JSF1.x,非常感谢。如前所述,valuechangelistener方法仅在提交的值与初始值不同时调用。您需要确保初始值不会在后续请求中更改。它不像Javascript那样。