gpt4 book ai didi

java - 支持 bean 中的更改值未反射(reflect)在 UI 中

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:02:57 24 4
gpt4 key购买 nike

组件通过值绑定(bind)连接到支持 bean 属性。

<h:inputText id="number" value="#{backingBean.number}" validator="#{backingBean.validateNumber}" />

在验证方法中,数字值发生了变化

public void validateNumber(FacesContext facesContext, UIComponent component, Object value) {
String inputValue = (String) value;

if (inputValue.length() == 9) {
inputValue = "0" + inputValue;
((UIInput) component).setSubmittedValue(inputValue);
((UIInput) component).setValue(inputValue);
setNumber(inputValue);
}
}

在调试时我可以验证该值实际上正在更改,但在渲染阶段新值以某种方式被旧值覆盖。这一定与我对 JSF 生命周期的误解有关,但我看到它的方式是改变组件在 UI 中绑定(bind)到的属性的值操作,并且因为我有一个到实际组件的钩子(Hook),所以我也改变了确定组件的值和 submittedValue(以发现问题),但更改仍未反射(reflect)在 UI 中?

有什么想法吗??

最佳答案

您为这项工作使用了错误的工具。你应该使用 Converter为此,不是 Validator . validator 是验证值,而不是更改(转换)值。

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

}

至于为什么在 validator 中不可能,这是基本上发生的事情:

  • 阶段 2:应用请求值(inputUIInputrequestHttpServletRequest )

    input.setSubmittedValue(request.getParameter(input.getClientId()));
  • 第 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());

关于java - 支持 bean 中的更改值未反射(reflect)在 UI 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4377455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com