为什么<h:inputtext required =“true”>允许空格?</h:inputtext>

时间:2011-11-30 13:04:20

标签: validation jsf jsf-2 whitespace required-field

当我在required="true"中设置<h:inputText>时,它仍然允许空格。我一直在尝试修改jsf-api.jar,但我无法理解如何生成新的JAR,所以我尝试从isEmpty()类修改UIInput方法并编译它,打开{ {1}}并将其替换为新的,但它不起作用。

当用户在jsf-api.jar中写入不允许空格时,我需要做trim()。我怎样才能做到这一点?

如果您要下载<h:inputText>资源,可以执行此操作,只需阅读如何:http://javaserverfaces.java.net/checkout.html

2 个答案:

答案 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的答案。