在xhtml中将字符串转换为小写以进行属性绑定?

mem*_*und 6 java jsf java-ee

我怎么能总是将属性转换username为小写?

这不起作用:

<h:inputText value="#{userService.user.username.toLowerCase()}" />
Run Code Online (Sandbox Code Playgroud)

因为目标变得"无法到达".我怎么能这样做?

Bal*_*usC 7

<h:inputText value="#{userService.user.username.toLowerCase()}" />
Run Code Online (Sandbox Code Playgroud)

您不能对给定的EL表达式执行"设置"操作,而这是必需的,以便使用提交的值更新模型值.所述toLowerCase()方法表达不具有相应的设置器方法.

从技术上讲,你应该Converter为工作创造一个.这是一个启动示例:

@FacesConverter("toLowerCaseConverter")
public class ToLowerCaseConverter implements Converter {

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object modelValue) {
        if (!(modelValue instanceof String)) { 
            return null; // Or throw ConverterException.
        }

        return ((String) modelValue).toLowerCase();
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
        if (submittedValue == null) { 
            return null;
        }

        return submittedValue.toLowerCase();
    }

}
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

<h:inputText value="#{userService.user.username}" converter="toLowerCaseConverter" />
Run Code Online (Sandbox Code Playgroud)

您最好不要使用转换策略来混淆模型.