Validation 验证成功后的UIInput#getValue()和getLocalValue()返回不同的值
,这是作者提到的 如果[COMPONENT]标记为有效,则两者都返回相同的值,即 提交、转换和验证值 考虑一个非常简单的片段:Validation 验证成功后的UIInput#getValue()和getLocalValue()返回不同的值,validation,jsf,lifecycle,Validation,Jsf,Lifecycle,,这是作者提到的 如果[COMPONENT]标记为有效,则两者都返回相同的值,即 提交、转换和验证值 考虑一个非常简单的片段: <h:form> <h:inputText value="#{bean.inputValue}" binding="#{bean.htmlInputText}" validator="nameValidator" /
<h:form>
<h:inputText value="#{bean.inputValue}"
binding="#{bean.htmlInputText}"
validator="nameValidator" /><br/>
<h:commandButton value="Submit" action="#{bean.action}" />
</h:form>
按下提交按钮时,输出为-
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
您正在调用应用程序阶段检查本地值 局部值在更新模型值阶段清除 作者是在流程验证阶段的上下文中讨论的
为了澄清,以下是整个过程:
RESTORE\u视图
- 从JSF视图状态还原
,getSubmittedValue()
,isValid()
和getLocalValue()
,如果有的话isLocalValueSet()
应用请求值
- 执行
和setValid(true)
setSubmittedValue(request.getParameter(getClientId())
处理验证
- 转换/验证
。getSubmittedValue()
- 如果有效,则执行
,setValue(convertedAndValidatedValue)
,setLocalValueSet(true)
。请注意,setSubmittedValue(null)
有效地表现为setValue()
setLocalValue()
- 如果无效,请执行
并跳过更新模型值和调用应用程序阶段setValid(false)
- 如果有效,则执行
更新模型值
- 如果设置了有效的本地值,则执行
并将bean.setProperty(getLocalValue())
、getSubmittedValue()
、isValid()
和getLocalValue()
重置为默认值isLocalValueSet()
、null
、false
和null
false
调用应用程序
- 调用
bean.method()
RENDER\u RESPONSE
- 如果
不是getSubmittedValue()
,则渲染它,否则如果null
返回isLocalValueSet()
,则渲染true
,否则渲染getLocalValue()
bean.getProperty()
- 在JSF视图状态下保存
,getSubmittedValue()
,isValid()
和getLocalValue()
,如果更改isLocalValueSet()
为了澄清,以下是整个过程:
RESTORE\u视图
- 从JSF视图状态还原
,getSubmittedValue()
,isValid()
和getLocalValue()
,如果有的话isLocalValueSet()
应用请求值
- 执行
和setValid(true)
setSubmittedValue(request.getParameter(getClientId())
处理验证
- 转换/验证
。getSubmittedValue()
- 如果有效,则执行
,setValue(convertedAndValidatedValue)
,setLocalValueSet(true)
。请注意,setSubmittedValue(null)
有效地表现为setValue()
setLocalValue()
- 如果无效,请执行
并跳过更新模型值和调用应用程序阶段setValid(false)
- 如果有效,则执行
更新模型值
- 如果设置了有效的本地值,则执行
并将bean.setProperty(getLocalValue())
、getSubmittedValue()
、isValid()
和getLocalValue()
重置为默认值isLocalValueSet()
、null
、false
和null
false
调用应用程序
- 调用
bean.method()
RENDER\u RESPONSE
- 如果
不是getSubmittedValue()
,则渲染它,否则如果null
返回isLocalValueSet()
,则渲染true
,否则渲染getLocalValue()
bean.getProperty()
- 在JSF视图状态下保存
,getSubmittedValue()
,isValid()
和getLocalValue()
,如果更改isLocalValueSet()
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