jsf生命周期:在“还原视图”中存储组件树和表单值

时间:2013-09-11 07:38:47

标签: jsf-2

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

1 个答案:

答案 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);
}

另见: