当我在<h:inputText>
中设置required="true"
时,它仍然允许空白。我一直试图修改jsf-api.jar
,但我无法理解如何生成新的JAR,所以我试图从UIInput
类修改isEmpty()
方法并编译它,打开jsf-api.jar
并将其替换为新的,但它不起作用。
我需要的是做trim()
当用户写在一个<h:inputText>
不允许空格。我怎样才能做到这一点呢?
如果您想下载jsf-api.jar
资源,您可以这样做,只需阅读如何在:http://javaserverfaces.java.net/checkout.html.
这是正常和自然的行为,而不是JSF特有的。空格可能是完全有效的输入。required="true"
只在空输入时起作用,在填充输入时不起作用。然而,在JSF中,您可以为String
类创建一个Converter
来自动修剪空白。
@FacesConverter(forClass=String.class)
public class StringTrimmer implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return value != null ? value.trim() : null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return (String) value;
}
}
把这个类放到项目的某个地方。由于@FacesConverter
,它将自动注册,并且由于forClass=String.class
,它将自动调用每个String
条目。
不需要来破解JSF API。
如果您想要关闭BalusC记录的作为标准JSF行为的答案之一的行为,您可以修改web.xml并包含以下内容:
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
<context-param>
这将触发JSF框架考虑值null
,这可能是更可取的,或者是来自BalusC的答案的替代。