警告:自从大学以来我就没有使用过 JSF,而且那是比我愿意承认的时间还要久远的事情,所以假装我是这项技术的新手。
背景: 我们正在使用 My Faces 2.2.4 从 Java 1.7 和 WAS 8.5 进行升级。 我们正在升级到 Java 1.8 和 WAS 9.0。
MF 版本保持不变,我们使用与 8.5 相同的库文件。我们按照 IBM 的建议使用文件共享库。
WAS 8.5 下一切正常。该应用程序在我的本地计算机上按预期运行,并且所有功能似乎都很好。
在升级后的服务器下运行时,JSF 应用程序会表现出一些异常行为。
当单击导致服务器调用的任何按钮时,第一次单击该按钮时,一切正常。之后,您单击的每个按钮,无论其实际功能如何,无论它是操作还是操作侦听器,都会执行与第一次单击按钮相同的功能,并具有相同的服务器响应。
即使您更改服务器调用的条件,服务器的响应也保持不变。我确实通过查看请求和响应对象来验证更新的条件是否已进入请求,但无论我单击什么(即使它调用完全不同的服务器端函数),响应都是相同的并且屏幕状态会重置本身以匹配第一次单击按钮的时刻。这意味着屏幕上的所有字段都会重置以包含单击时其中的数据,即使该数据已更新。
我真的很困惑。我一直在尝试研究这个问题,但坦白说,我什至不知道要问什么问题。
更新:我们做了一些额外的测试,并确定第二个请求实际上根本没有到达服务器(在第一次尝试后我们没有看到添加的调试行)。因此,我们看到的与其说是第二次回发,不如说是第一次重复。
此外,我们在多个浏览器中看到了相同的行为。
为后代发布我们的发现。
事实证明,这是我们使用的 PrimeFaces 版本 (3.3.1) 的兼容性问题。我们将 Primefaces 升级到 5.3(仍然是一个非常旧的版本),功能按预期返回,但命令链接根本不起作用(我预计升级会带来编码问题)。但是,所有按钮执行相同操作并一遍又一遍返回相同结果的问题已得到纠正。我们看到服务器的调试日志正在主动生成,这是向前迈出的一步。
郑重声明,我始终建议您使用最新版本的 Primefaces(或任何组件),因为旧版本中可能存在漏洞(如评论中指出的)。