如何防止空格形成 JSF h:inputText

How to prevent spaces form JSF h:inputText

在我的 JSF 2.2 应用程序中,当我创建 JSF 表单时,问题是当我从我的表单插入它时,我可以在 <h:inputText> 的开头放置空格,它会 return 这些带有我插入其中的值的空格。所以我应该用 mystring.tirm() 处理每个值以使空格无效。我可以使用其他任何东西来 return 这个没有空格的值吗?我知道 converter 和 JavaScript,所以你能给我另一种选择吗?我不想使用任何转换器和 JavaScript.

I don't want to use any converter and JavaScript

这里没有魔法。您必须编写代码来完成这项工作。我了解到您更关心的是您不想在每个输入字段上重复相同的转换工作。

在这种情况下,只需通过 @FacesConverterforClass 属性专门在 String.class 上注册一个转换器,如下所示。

@FacesConverter(forClass=String.class)
public class TrimConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
        String trimmed = (submittedValue != null) ? submittedValue.trim() : null;
        return (trimmed == null || trimmed.isEmpty()) ? null : trimmed;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object modelValue) {
        return (modelValue != null) ? modelValue.toString() : "";
    }

}

这样您就不需要在每个输入字段中声明转换器。它将透明地应用于尚未注册显式转换器的每个 String 模型值。

不推荐 JavaScript 方式,因为它完全在客户端运行,最终用户可以轻松禁用和操作 JavaScript。 JSF 转换器在服务器端运行,最终用户无法操纵其结果。

我认为真正的问题出在其他地方。我在我的表单中遇到了同样的事情(使用 postgresql 和 JSF 2.1)

当我创建一个字段类型“char(20)”时。在这种情况下,我在 h:inputText.

中得到了不必要的空格

然后我将字段类型更改为“character varying(20)”。在这种情况下,h:inputText.

中没有空格

这是对此的解释; Postgresql doc