本文介绍了验证成功后,UIInput#getValue()和getLocalValue()返回不同的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此处,作者提到过. >

Here, it is mentioned by the author.

考虑一个非常简单的代码段:

Consider a very simple snippet:

<h:form>
            <h:inputText value="#{bean.inputValue}"
                         binding="#{bean.htmlInputText}"
                         validator="nameValidator" /><br/>
            <h:commandButton value="Submit" action="#{bean.action}" />
</h:form>

具有@RequestScoped支持bean-

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());
}

按下提交按钮时,输出为-

On pressing the submit button, output is-

 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

推荐答案

您正在调用应用程序阶段检查本地值.

You're checking the local value during invoke application phase.

在更新模型值阶段清除本地值.

The local value is cleared out during update model values phase.

作者在过程验证阶段进行讨论.

The author is talking in context of process validations phase.

为澄清起见,这是完整过程:

To clarify, here's the full process:

  • 从JSF视图状态恢复getSubmittedValue()isValid()getLocalValue()isLocalValueSet()(如果有).
  • Restore getSubmittedValue(), isValid(), getLocalValue() and isLocalValueSet() from JSF view state, if any.
  • 执行setValid(true)setSubmittedValue(request.getParameter(getClientId())).
  • 转换/验证getSubmittedValue().
    • 如果有效,请执行setValue(convertedAndValidatedValue)setLocalValueSet(true)setSubmittedValue(null).请注意,setValue()的行为实际上与setLocalValue()一样.
    • 如果无效,请执行setValid(false)并跳过更新模型值并调用应用程序阶段.
    • Convert/validate getSubmittedValue().
      • If valid, do setValue(convertedAndValidatedValue), setLocalValueSet(true), setSubmittedValue(null). Do note that setValue() effectively behaves as setLocalValue().
      • If invalid, do setValid(false) and skip update model values and invoke application phases.
      • 如果设置了有效值和局部值,请执行bean.setProperty(getLocalValue())并将getSubmittedValue()isValid()getLocalValue()isLocalValueSet()重置为其默认值nullfalsenull和.
      • If valid and local value set, do bean.setProperty(getLocalValue()) and reset getSubmittedValue(), isValid(), getLocalValue() and isLocalValueSet() to their default values of null, false, null and false.
      • 调用bean.method().
      • 如果getSubmittedValue()不是null,则渲染它,否则,如果isLocalValueSet()返回true,则渲染getLocalValue(),否则渲染bean.getProperty().
      • 如果已更改,请在JSF视图状态下保存getSubmittedValue()isValid()getLocalValue()isLocalValueSet().
      • If getSubmittedValue() is not null, render it, else if isLocalValueSet() returns true, render getLocalValue(), else render bean.getProperty().
      • Save getSubmittedValue(), isValid(), getLocalValue() and isLocalValueSet() in JSF view state, if changed.

      这篇关于验证成功后,UIInput#getValue()和getLocalValue()返回不同的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-13 23:41