¿Por qué permite espacios en blanco?

Cuando establezco required="true" en a , aún permite espacios en blanco. He estado tratando de modificar el jsf-api.jar pero no pude entender cómo generar un nuevo JAR, así que traté de modificar el método isEmpty() de la clase UIInput y comstackrlo, abrir jsf-api.jar y reemplazar con el nuevo, pero no funcionó.

Lo que necesito es hacer trim() cuando el usuario escribe en para no permitir espacios en blanco. ¿Cómo puedo conseguir esto?

Si desea descargar el recurso jsf-api.jar , puede hacerlo, solo lea cómo hacerlo en: http://javaserverfaces.java.net/checkout.html .

Es un comportamiento normal y natural y no específico de JSF. Un espacio en blanco puede ser una entrada perfectamente válida. El required="true" solo entra en las entradas vacías, no en las entradas llenas. Sin embargo, en JSF puedes simplemente crear una clase Converter for String para recortar automáticamente el espacio en blanco.

 @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; } } 

Pon esta clase en algún lugar de tu proyecto. Se registrará automáticamente gracias a @FacesConverter y se invocará automáticamente para cada entrada de String gracias a forClass=String.class .

No es necesario hackear la JSF API / impl. Esto no tiene sentido.

Si desea desactivar el comportamiento que BalusC nota como una de las respuestas como comportamiento estándar de JSF, puede modificar el web.xml e incluir lo siguiente.

  javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL true  

Esto disparará el marco JSF para considerar los valores null que pueden ser preferibles, o una alternativa a la respuesta de BalusC.