当我在required="true"
中设置<h:inputText>
时,它仍然允许空格。我一直在尝试修改jsf-api.jar
,但我无法理解如何生成新的JAR,所以我尝试从isEmpty()
类修改UIInput
方法并编译它,打开{ {1}}并将其替换为新的,但它不起作用。
当用户在jsf-api.jar
中写入不允许空格时,我需要做trim()
。我怎样才能做到这一点?
如果您要下载<h:inputText>
资源,可以执行此操作,只需阅读如何:http://javaserverfaces.java.net/checkout.html。
答案 0 :(得分:43)
这是正常和自然的行为,而不是JSF特定的。空格可能是完全有效的输入。 required="true"
仅启动空输入,而不是填充输入。但是,在JSF中,您可以为Converter
类创建String
以自动修剪空格。
@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
,它会被String
自动注册,并会自动为每个forClass=String.class
条目调用。
无需来破解JSF API / impl。这毫无意义。
答案 1 :(得分:9)
如果您想要关闭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的答案。