【问题标题】:Convert string to lowercase for property binding within xhtml?将字符串转换为小写以在xhtml中进行属性绑定?
【发布时间】:2012-10-19 13:43:18
【问题描述】:

如何始终将属性username 转换为小写?

这不起作用:

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

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

【问题讨论】:

  • 如何改变它的getter return username.toLowerCase();(也做一些空检查)

标签: java jsf jakarta-ee


【解决方案1】:
<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" />

您最好不要在模型中加入转换策略。

【讨论】:

  • 这里扩展了哪个转换器? import org.apache.myfaces.config.element.Converter; 在这里不起作用,因为它需要很多覆盖方法,例如 getConverterClass getConverterId getForClass
  • 只是标准的 JSF 转换器。你从来没有创造过一个吗?这是javax.faces.convert.Converter
  • 好的,我们必须在这里使用 implements 而不是 extends。然后它就可以工作了,另外将 void 更改为 String 或 Object.
  • 糟糕,抱歉。早上 5:00 没有喝足够的咖啡。答案已确定。我应该使用 IDE 而不是 SO 消息编辑器。
  • 没问题,无论如何这可能是小写的最佳解决方案。它当然适用于 setter 中的对话,但正如您所说,应避免使模型混乱。
【解决方案2】:

您可以为此使用 jstl 函数

包括:

并使用

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

【讨论】:

  • 错了。您不能对函数表达式执行“设置”操作。
【解决方案3】:

这种方式应该可行。设置名称后,名称即为小写。

String name;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2021-06-11
    • 2018-01-13
    • 1970-01-01
    • 2016-08-11
    相关资源
    最近更新 更多