В моем приложении JSF 2.2, когда я создаю форму JSF, проблема в том, что я могу поместить пробелы в начало <h:inputText>
, когда я вставляю их из своей формы и верну эти пространства с моим значением, которое я вставил в него. Поэтому я должен обрабатывать каждое значение с mystring.tirm()
, чтобы аннулировать пробелы. Могу ли я использовать что-то еще, чтобы вернуть это значение без пробелов? Я знаю об конвертере и JavaScript, так что вы можете дать мне другой вариант использования? Я не хочу использовать какой-либо конвертер и JavaScript.Как предотвратить пробелы в форме JSF h: inputText
ответ
Я не хочу использовать любой конвертер и JavaScript
Там нет никакой магии здесь. Вы должны написать код для выполнения задания. Я понимаю, что ваша забота больше о том, что вы не хотите повторять одно и то же задание преобразования в каждом отдельном поле ввода.
В этом случае просто зарегистрируйте конвертер именно на String.class
с помощью атрибута forClass
@FacesConverter
, как показано ниже.
@FacesConverter(forClass=String.class)
public class TrimConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
String trimmed = (submittedValue != null) ? submittedValue.trim() : null;
return (trimmed == null || trimmed.isEmpty()) ? null : trimmed;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object modelValue) {
return (modelValue != null) ? modelValue.toString() : "";
}
}
Таким образом, вам не нужно декларировать преобразователь в каждом поле ввода. Он будет применяться прозрачно для каждого значения модели String
, которое еще не имеет зарегистрированного явного конвертера.
JavaScript-метод не рекомендуется, поскольку он полностью работает на стороне клиента, и конечные пользователи могут легко отключить и управлять JavaScript. Конвертер JSF работает на стороне сервера, и его результат не управляется конечным пользователем.
Я действительно настоящая проблема в другом месте. Я столкнулся с тем же делом в своих формах (используя postgresql и JSF 2.1)
Когда я создал поле типа «char (20)». В этом случае я получил ненужные пробелы в h: inputText.
Затем я изменил тип поля на «меняющийся символ (20)». В этом случае не было пробелов в h: inputText.
Вот объяснение этого; Postgresql doc
Я не хочу использовать какой-либо конвертер и javascript – user1608962
Вы можете использовать trim() в setter: 'this.field = field.trim()'. – Geinmachi