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的具体问题涉及带空格的字符串,而不是空字符串,这个上下文参数确实是解决方案之一。