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

Ing*_*uiZ 15 validation jsf whitespace required-field jsf-2

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

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

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

Bal*_*usC 43

这是正常和自然的行为,而不是JSF特有的.空格可能是完全有效的输入.required="true"空输入中的唯一开始,而不是填充输入.但是,在JSF中,您可以创建一个Converterfor 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

把这个类放在项目的某个地方.它会自动注册,感谢@FacesConverter每个String条目自动调用和感谢forClass=String.class.

无需破解JSF API/impl.这毫无意义.


Joh*_*ary 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>
Run Code Online (Sandbox Code Playgroud)

这将触发JSF框架考虑null可能更可取的值,或者替代BalusC的答案.

  • OP的具体问题涉及带有空格/空格的字符串,而不是空字符串,对于这些字符串,这个上下文参数确实是解决方案之一. (2认同)