Validation 为什么<;h:inputText required=";“真的”&燃气轮机;允许空白吗?

Validation 为什么<;h:inputText required=";“真的”&燃气轮机;允许空白吗?,validation,jsf,jsf-2,whitespace,required-field,Validation,Jsf,Jsf 2,Whitespace,Required Field,当我在中设置required=“true”时,它仍然允许空格。我一直在尝试修改jsfapi.jar,但我不知道如何生成新的jar,所以我尝试从UIInput类修改isEmpty()方法并编译它,打开jsfapi.jar并用新的方法替换它,但它不起作用 当用户在中写入时,我需要执行trim(),以不允许出现空格。我怎样才能做到这一点 如果您想下载jsfapi.jar资源,您可以这样做,只需阅读如何在:.这是正常和自然的行为,而不是特定于jsf的。空格可能是完全有效的输入。required=“tru

当我在
中设置
required=“true”
时,它仍然允许空格。我一直在尝试修改
jsfapi.jar
,但我不知道如何生成新的jar,所以我尝试从
UIInput
类修改
isEmpty()
方法并编译它,打开
jsfapi.jar
并用新的方法替换它,但它不起作用

当用户在
中写入时,我需要执行
trim()
,以不允许出现空格。我怎样才能做到这一点


如果您想下载
jsfapi.jar
资源,您可以这样做,只需阅读如何在:.

这是正常和自然的行为,而不是特定于jsf的。空格可能是完全有效的输入。
required=“true”
仅对空输入有效,而对填充输入无效。但是,在JSF中,您可以为
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;
    }

}
把这个类放在你项目的某个地方。由于
@facescoverter
,它将自动注册,并且由于
forClass=String.class
,它将自动为每个
String
条目调用


无需破解JSF API/impl。这没有任何意义。

如果您想关闭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>

javax.faces.explait_EMPTY_STRING_SUBMITTED_VALUES_为_NULL
真的

这将触发JSF框架考虑值<代码> null <代码>,这可能是更好的,或者是BaluSc的答案的替代品。< / P>哇!!!!这很简单,很有效,谢谢你。我花了很多时间做这项工作:/不客气。将来,每当您认为“我需要破解JSF”时,首先在这里询问有关堆栈溢出的问题,如果您的理由确实有效;)请注意:如果这似乎不起作用(从未调用转换器),请检查“我得到这个异常”中的答案:

java.lang.ClassCastException:java.lang.Integer不能转换为java.lang.String
OP的具体问题涉及带空格的字符串,而不是空字符串,这个上下文参数确实是解决方案之一。