7

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

这不起作用:

<h:inputText value="#{userService.user.username.toLowerCase()}" />

由于目标因此而“无法访问”。我怎么能这样做?

4

3 回答 3

8
<h:inputText value="#{userService.user.username.toLowerCase()}" />

您不能对给定的 EL 表达式执行“设置”操作,但这是强制性的,以便使用提交的值更新模型值。toLowerCase()方法表达式没有对应的 setter 方法。

从技术上讲,您应该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();
    }

}

按如下方式使用它:

<h:inputText value="#{userService.user.username}" converter="toLowerCaseConverter" />

您最好不要使用转换策略使模型混乱。

于 2012-10-30T09:01:20.587 回答
4

您可以为此使用 jstl 函数

包括:<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

并使用 < h:inputText value="${fn:toLowerCase(string)}"/>

或者您可以通过 .toLowerCase() 在 java 中将用户名设为小写。

于 2012-10-30T08:37:22.750 回答
1

这种方式应该有效。设置名称后,名称将被小写。

String name;

public void setName(String name){
 this.name = name.toLowerCase();
}
于 2012-10-30T08:37:15.333 回答