如何在恢复视图阶段查看 ui 组件树中保存的内容?表单值(如表单输入字段值)在恢复视图阶段保存在哪里?以及 ui 组件树如何在存储到模型对象之前提取它们并验证它们?
问问题
1019 次
1 回答
5
如何在恢复视图阶段查看 ui 组件树中保存的内容?
这个问题最终令人困惑。在restore期间没有保存任何内容。相反,状态正在恢复。状态的保存发生在渲染响应阶段。你可以看到它发生在JSF-implementation specific implementation 的方法中。在 Mojarra 的情况下,它是.saveView()
StateManager
StateManagerImpl#saveView()
表单值(如表单输入字段值)在恢复视图阶段保存在哪里?
视图状态不包含任何表单值。提交的值只是在应用请求值阶段以通常的方式作为 HTTP 请求参数获得。如果您熟悉基本的Servlet API,那么您肯定会理解它是如何工作的。
以及 ui 组件树如何在存储到模型对象之前提取它们并验证它们?
提取(解码)表单值发生在应用请求值阶段,大致如下:
String submittedValue = request.getParameter(input.getClientId(facesContext));
Mojarra 中的源代码可以在HtmlBasicRenderer#decode()
. 验证发生在UIInput#validate()
验证阶段的方法中,大致可以表示如下:
for (Validator validator : input.getValidators())
validator.validate(facesContext, input, submittedAndConvertedValue);
}
也可以看看:
于 2013-09-11T12:28:17.673 回答