4

我正在调试一个外国 JSF 应用程序。问题是,我提交了一个表单,但这些值没有被继承。

使用阶段侦听器,我可以看到生命周期并未完全运行,因此可以说它跳过阶段 2 -5:在恢复视图阶段之后,直接调用渲染响应阶段。我错过了应用值、验证、更新模型操作等。

所以,这可能是一个先有鸡还是先有蛋的问题: 1. 负责的阶段没有被调用,所以新的表单输入不能被结转。2.系统不识别任何新的输入,因此在恢复视图后直接渲染。

我检查了没有调用 responseComplete() 或 renderResponse()。

我不知何故被卡住了。有什么想法可以验证这两个假设之一吗?或者一般如何调试?有没有人有类似的问题?


更新

我怀疑 JSF 不知道回发请求并像处理初始视图一样处理它。这可以解释,我只通过了第 1 和第 6 阶段。

如果 JSF 将其识别为non-faces-request,我该如何检查?
如何检查当前facesContext.

4

2 回答 2

7

我引用了我之前发布的答案

每当UICommand组件未能调用关联的操作时,请验证以下内容:

  1. UICommand组件必须放置在UIForm组件内(例如h:form)。
  2. 您不能将多个组件相互嵌套(注意包含文件!)。UIForm
  3. 不应发生验证/转换错误(用于 h:messages获取所有错误)。
  4. 如果UICommand组件被放置在组件内,请确保保留UIData完全相同 (位于's属性DataModel后面的对象 )。UIDatavalue
  5. 在应用请求值阶段不应评估组件和所有父组件的rendered和属性。disabledfalse
  6. 确保请求-响应链中没有PhaseListener或有任何EventListener更改了 JSF 生命周期以跳过调用操作阶段。
  7. 确保没有FilterServlet在同一个请求-响应链中以某种方式阻止了请求 FacesServlet

由于在您的特定情况下,第 2-5 阶段被跳过并且您确定(?)FacesContext#renderResponse()没有被调用,因此可以从列表中删除原因 3、6 和 7。原因 4 和 5 也可能会被忽略,这取决于您调试 JSF 阶段的方式。调查其他原因。原因 2 我的美分。检查您是否<form><form></form></form>在生成的 HTML 源代码中看不到并在 JSF 源代码中回溯。

于 2010-04-26T11:15:42.853 回答
0

找到了解决方案!很抱歉,但我猜它是非常特定于应用程序的:JSF 的自定义 StateManager 不适用于 JSF 1.2。这导致了这个奇怪的错误。修复了 StateManager,一切正常。这很痛苦,而且花费了很多时间:-(

还是要谢谢你的帮助 :-)

于 2010-04-29T09:31:57.127 回答