Почему <h: inputText required = "true" > разрешает пробелы?
Когда я устанавливаю required="true"
в <h:inputText>
, он по-прежнему допускает пробелы. Я пытаюсь изменить jsf-api.jar
, но я не мог понять, как создать новый JAR, поэтому я попытался изменить метод isEmpty()
из класса UIInput
и скомпилировать его, откройте jsf-api.jar
и замените его на новый, но это не сработало.
Мне нужно сделать trim()
, когда пользователь записывает в <h:inputText>
, чтобы не пустить пробелы. Как я могу достичь этого?
Если вы хотите загрузить ресурс jsf-api.jar
, вы можете сделать это, просто прочитайте, как на: http://javaserverfaces.java.net/checkout.html.
Ответы
Ответ 1
Это нормальное и естественное поведение, а не JSF. Пустое пространство может быть вполне допустимым. required="true"
срабатывает только на пустые входы, а не на заполненные входы. В JSF вы можете просто создать класс Converter
для 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;
}
}
Поместите этот класс в проект. Он будет автоматически зарегистрирован благодаря @FacesConverter
и автоматически активируется для каждой записи String
благодаря forClass=String.class
.
Не нужно взломать JSF API/impl. Это не имеет смысла.
Ответ 2
Если вы хотите отключить поведение, которое 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.