为什么 <h:inputText required= "true" >允许空格?



当我在<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的答案的替代。

相关内容

  • 没有找到相关文章

最新更新