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

时间:2012-10-30 08:33:35

标签: java jsf java-ee

我怎样才能将属性username转换为小写?

这不起作用:

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

因此目标变得“无法到达”。 我怎么能这样做?

3 个答案:

答案 0 :(得分:7)

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

您不能对给定的EL表达式执行“set”操作,而这是必需的,以便使用提交的值更新模型值。 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" />

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

答案 1 :(得分:4)

您可以使用jstl函数

包括:&lt;%@ taglib uri =“http://java.sun.com/jsp/jstl/functions”prefix =“fn”%&gt;

并使用&lt; h:inputText value =“$ {fn:toLowerCase(string)}”/&gt;

或者你可以通过.toLowerCase()在java中使用小写的用户名。

答案 2 :(得分:1)

这种方式应该有效。一旦设置了名称,名称就会降低。

String name;

public void setName(String name){
 this.name = name.toLowerCase();
}