在我的JSF 2.2应用程序中,当我创建JSF表单时,问题是当我从表单中插入空格时,我可以在<h:inputText>
的开头放置空格,它将以我的值返回这些空格插入其中。因此,我应该使用mystring.tirm()
处理每个值以使空格无效。我可以使用任何其他东西来返回没有空格的值吗?我知道转换器和JavaScript,所以你能给我另一个选择吗?我不想使用任何转换器和JavaScript。
答案 0 :(得分:17)
我不想使用任何转换器和JavaScript
这里没有魔力。你必须编写代码来完成这项工作。我认为您更关心的是,您不希望在每个输入字段上重复相同的转换工作。
在这种情况下,只需通过String.class
的{{1}}属性在forClass
上专门注册一个转换器,如下所示。
@FacesConverter
这样您就不需要在每个输入字段中声明转换器。它将透明地应用于每个@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() : "";
}
}
模型值,该值尚未注册显式转换器。
不推荐使用JavaScript方式,因为它完全在客户端运行,并且最终用户可以轻松地禁用和操作JavaScript。 JSF转换器在服务器端运行,其结果不能由最终用户操纵。
答案 1 :(得分:0)
我认为真正的问题出在其他地方。我在表单中遇到了同样的事情(使用postgresql和JSF 2.1)
当我创建字段类型&#34; char(20)&#34;。在这种情况下,我在 h:inputText 中获得了不必要的空格。
然后我将字段类型更改为&#34;字符变化(20)&#34;。在这种情况下, h:inputText 中没有空格。
以下是对此的解释; Postgresql doc