15

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

我需要做的是trim()当用户写入<h:inputText>不允许空格时。我怎样才能做到这一点?

如果你想下载jsf-api.jar资源,你可以这样做,只需阅读如何在:http: //javaserverfaces.java.net/checkout.html

4

2 回答 2

43

这是正常和自然的行为,而不是特定于 JSF。空格可能是完全有效的输入。required="true"唯一的作用是空输入,而不是填充输入。但是,在 JSF 中,您可以只创建一个ConverterforString类来自动修剪空白。

@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。这是没有意义的。

于 2011-11-30T14:54:23.057 回答
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 的答案。

于 2012-12-10T18:24:11.240 回答