Java UI中未反映支持bean中的更改值
该组件通过值绑定连接到支持bean属性Java UI中未反映支持bean中的更改值,java,jsf,Java,Jsf,该组件通过值绑定连接到支持bean属性 <h:inputText id="number" value="#{backingBean.number}" validator="#{backingBean.validateNumber}" /> 在调试期间,我可以验证该值是否确实被更改,但在渲染阶段,新值以某种方式被旧值覆盖。 这一定与我误解JSF生命周期有关,但在我看来,我正在更改UI中组件绑定到的属性的值,并且因为我有一个到实际组件的钩子,所以我也更改组件的值和submittedVa
<h:inputText id="number" value="#{backingBean.number}" validator="#{backingBean.validateNumber}" />
在调试期间,我可以验证该值是否确实被更改,但在渲染阶段,新值以某种方式被旧值覆盖。
这一定与我误解JSF生命周期有关,但在我看来,我正在更改UI中组件绑定到的属性的值,并且因为我有一个到实际组件的钩子,所以我也更改组件的值和submittedValue以确保(找到问题)但这种变化仍然没有反映在用户界面中
有什么想法吗???你在工作中使用了错误的工具。你应该用a来做这个,而不是a。验证器是验证值,而不是更改(转换)值
public void EnterpriseNumberConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value.length() == 9) {
value = "0" + value;
}
return value;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return (String) value;
}
}
至于为什么在验证器中不可能,基本上是这样的:
- 阶段2:应用请求值(
is和input
is)request
- 阶段3:验证阶段
Object value = input.getSubmittedValue(); try { value = input.getConvertedValue(facesContext, value); } catch (ConverterException e) { // ... return; } try { for (Validator validator : input.getValidators()) validator.validate(facesContext, input, value); } input.setSubmittedValue(null); input.setValue(value); // You see? } catch (ValidatorException e) { // ... }
- 阶段4:更新模型值阶段
bean.setProperty(input.getValue());
Object value = input.getSubmittedValue();
try {
value = input.getConvertedValue(facesContext, value);
} catch (ConverterException e) {
// ...
return;
}
try {
for (Validator validator : input.getValidators())
validator.validate(facesContext, input, value);
}
input.setSubmittedValue(null);
input.setValue(value); // You see?
} catch (ValidatorException e) {
// ...
}
bean.setProperty(input.getValue());