Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 验证成功后的UIInput#getValue()和getLocalValue()返回不同的值_Validation_Jsf_Lifecycle - Fatal编程技术网

Validation 验证成功后的UIInput#getValue()和getLocalValue()返回不同的值

Validation 验证成功后的UIInput#getValue()和getLocalValue()返回不同的值,validation,jsf,lifecycle,Validation,Jsf,Lifecycle,,这是作者提到的 如果[COMPONENT]标记为有效,则两者都返回相同的值,即 提交、转换和验证值 考虑一个非常简单的片段: <h:form> <h:inputText value="#{bean.inputValue}" binding="#{bean.htmlInputText}" validator="nameValidator" /

,这是作者提到的

如果[COMPONENT]标记为有效,则两者都返回相同的值,即 提交、转换和验证值

考虑一个非常简单的片段:

<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()、isValid()、getLocalValue()和isLocalValueSet()设置为默认值。为什么要将它们保存在视图状态中?如果在下一个还原视图阶段,它们也将是默认值。与默认值相比,如果它们没有更改,则最佳状态管理实现确实不会保存它们。您可能会感到恼火,因为我在反复询问与一个概念相关的问题。我在这里提出了一个问题,我的困惑是,在输入了一个错误的值之前,该值是有效的,而isLocalValueSet()则是真的。这只有在它之前被序列化并保存在视图状态下时才可能,getValue()&getLocalValue()也反映了以前的已编辑值。您似乎对提出的问题毫无兴趣。相信我,除了请求/咨询你,我别无选择。事实上,我在这里提出的所有问题都是由于你的出席。如果你不在这里,我就不会养它们了。这里(公司)的所有高级架构师都不熟悉这一点。据我所知,与我现在所知道的相比,他们连一点都不知道。请告诉我我最近的评论是否正确,或者至少告诉我哪里出了问题。没问题。不过我喜欢你的技术好奇心。那个问题是我的。您的问题与那些永恒的“请为我调试此代码转储”问题不同。显然,您希望学习钓鱼,而不是吃鱼。如果验证成功,则在第四阶段,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