Shi*_*han 1 validation lifecycle jsf
在这里,它被作者提及。
如果[COMPONENT]标记为有效,则两者都返回相同的值,即提交,转换和验证的值。
考虑一个非常简单的代码段:
<h:form>
<h:inputText value="#{bean.inputValue}"
binding="#{bean.htmlInputText}"
validator="nameValidator" /><br/>
<h:commandButton value="Submit" action="#{bean.action}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
与@RequestScoped支持豆-
public Integer inputValue = 5;
public HtmlInputText htmlInputText;
public void action(){
System.out.println(" getSubmittedValue() "+htmlInputText.getSubmittedValue());
System.out.println(" isLocalValueSet() "+ htmlInputText.isLocalValueSet());
System.out.println(" getValue() " + htmlInputText.getValue());
System.out.println(" getLocalValue() " +htmlInputText.getLocalValue());
}
Run Code Online (Sandbox Code Playgroud)
按下提交按钮后,输出为-
getSubmittedValue() null AS EXPECTED, since Conversion & Validation succeded
isLocalValueSet() false
getValue() 25 AS EXPECTED, since Conversion & Validation succeded
getLocalValue() null Why NULL? IN WHAT CONTEXT HAS THE AUTHOR SAID SO
Run Code Online (Sandbox Code Playgroud)
您正在调用应用程序阶段检查本地值。
在更新模型值阶段会清除本地值。
作者在过程验证阶段进行讨论。
要澄清,这是完整的过程:
RESTORE_VIEWgetSubmittedValue()(如果有)。isValid()getLocalValue()isLocalValueSet()APPLY_REQUEST_VALUESsetValid(true)和setSubmittedValue(request.getParameter(getClientId()))。PROCESS_VALIDATIONSgetSubmittedValue()。
setValue(convertedAndValidatedValue),setLocalValueSet(true),setSubmittedValue(null)。请注意,该setValue()行为实际上与一样setLocalValue()。setValid(false)并跳过更新模型值并调用应用程序阶段。UPDATE_MODEL_VALUESbean.setProperty(getLocalValue())和复位getSubmittedValue(),isValid(),getLocalValue()和isLocalValueSet()到它们的默认值null,false,null和false。INVOKE_APPLICATIONbean.method()。RENDER_RESPONSEgetSubmittedValue()不是null,则渲染它,否则isLocalValueSet()返回true,渲染getLocalValue(),否则渲染bean.getProperty()。getSubmittedValue(),isValid(),getLocalValue()以及isLocalValueSet()在JSF视图状态,如果改变。