1

如何在恢复视图阶段查看 ui 组件树中保存的内容?表单值(如表单输入字段值)在恢复视图阶段保存在哪里?以及 ui 组件树如何在存储到模型对象之前提取它们并验证它们?

4

1 回答 1

5

如何在恢复视图阶段查看 ui 组件树中保存的内容?

这个问题最终令人困惑。在restore期间没有保存任何内容。相反,状态正在恢复。状态的保存发生在渲染响应阶段。你可以看到它发生在JSF-implementation specific implementation 的方法中。在 Mojarra 的情况下,它是.saveView()StateManagerStateManagerImpl#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 回答