本文介绍了验证成功后,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()
andisLocalValueSet()
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 thatsetValue()
effectively behaves assetLocalValue()
. - If invalid, do
setValid(false)
and skip update model values and invoke application phases.
- 如果设置了有效值和局部值,请执行
bean.setProperty(getLocalValue())
并将getSubmittedValue()
,isValid()
,getLocalValue()
和isLocalValueSet()
重置为其默认值null
,false
,null
和.
- If valid and local value set, do
bean.setProperty(getLocalValue())
and resetgetSubmittedValue()
,isValid()
,getLocalValue()
andisLocalValueSet()
to their default values ofnull
,false
,null
andfalse
.
- 调用
bean.method()
.
- 如果
getSubmittedValue()
不是null
,则渲染它,否则,如果isLocalValueSet()
返回true
,则渲染getLocalValue()
,否则渲染bean.getProperty()
. - 如果已更改,请在JSF视图状态下保存
getSubmittedValue()
,isValid()
,getLocalValue()
和isLocalValueSet()
.
- If
getSubmittedValue()
is notnull
, render it, else ifisLocalValueSet()
returnstrue
, rendergetLocalValue()
, else renderbean.getProperty()
. - Save
getSubmittedValue()
,isValid()
,getLocalValue()
andisLocalValueSet()
in JSF view state, if changed.
这篇关于验证成功后,UIInput#getValue()和getLocalValue()返回不同的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
- If valid, do
- 如果有效,请执行