如何在恢复视图阶段查看ui组件树中保存的内容?表单值(如表单输入字段值)在恢复视图阶段保存在何处? ui组件树如何在存储到模型对象之前提取它们并验证它们?
答案 0 :(得分:4)
如何在恢复视图阶段查看ui组件树中保存的内容?
这个问题最终令人困惑。 恢复期间没有已保存。相反,状态正在恢复。状态的保存发生在渲染响应阶段。您可以在saveView()
的JSF实现特定实现的StateManager
方法中看到它。在Mojarra的情况下,它是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);
}