string - строке - удалить пробелы из строки

string - строке - удалить пробелы из строки

Замените нулевые или пустые строки указанным значением при выводе с использованием конвертера JSF (1)

Следующее - это конвертер, в основном предназначенный для обрезки ведущих и завершающих пробелов и замены более одного пробела между словами в предложении или тексте с одним пространством. Теперь преобразователь изменен, чтобы заменить null или пустые строки на «Недоступно» (при необходимости может быть локализован динамически).

Поскольку преобразователи не вызывается, когда значение модели равно null зависимости от предыдущего вопроса , com.sun.faces.renderkit.html_basic.TextRenderer был расширен с целью вызова преобразователей, когда значение свойства в связанной модели равно null .

Следующий условный тест удален, так что метод getFormattedValue() может быть вызван, даже если встречается null значение.

Это было зарегистрировано в faces-config.xml следующим образом.

Преобразователь StringTrimmer все еще не вызывается ( getAsString() ), когда значение свойства в целевой модели возвращает значение null .

Ввод условного теста в EL, например # # повсюду в приложении - это безумие. Любое предложение?

Это Mojarra 2.2.12.

Обновить :

Преобразованные значения доступны, когда один из операторов return внутри getFormattedValue() возвращает пустую строку "" , когда currentValue имеет значение null , изменяется для возврата преобразованного значения при вызове

внутри этого метода getFormattedValue() .

На первый взгляд, Converter никогда не намерен применять «значение по умолчанию».

Независимо от вопроса, что бы вы ни делали в getAsString() , вы должны гарантировать, что полученная String может быть преобразована обратно в исходный Object когда вы передадите его обратно через getAsObject() . Ваш конвертер не делает этого. Даже если вы вряд ли когда-либо сможете его использовать, технически конвертер необходимо изменить, чтобы преобразовать точную строку "Not available" обратно в null . Другими словами, ваш конвертер должен быть сконструирован таким образом, что getAsObject() и getAsString() могут успешно передавать результат друг другу в бесконечный цикл и каждый раз возвращать одинаковый результат.

Что касается конкретного функционального требования для обеспечения значения по умолчанию, а не в Converter вы должны сделать это либо в модели, либо в представлении, в зависимости от того, откуда исходит фактическое значение по умолчанию. В вашем конкретном случае вы просто хотите иметь текст / метку заполнителя по умолчанию в пользовательском интерфейсе, когда такого значения нет. Это относится к мнению.

Я полностью согласен с тем, что это безумие, если вы уже как на полпути разрабатываете приложение и имеете сотни из них во всех местах. Однако это не безумие, если вы уже учли это с самого начала. Если вы этого не сделали, тогда, хорошо, выучите урок, кусайте пулю и регулярно исправляйте код соответственно. Приличные IDE имеют нахождение и замену regex, которые могут помочь в этом. Все были там и делали такое безумие, даже я. Чтобы уменьшить шаблон, оберните его в EL-функцию или файл тегов.

Что касается конкретной проблемы Converter не вызывается, когда значение модели равно null , что я лично полностью согласен с непредвиденным поведением, это когда-либо сообщалось как выпуск 630 Mojarra . Позднее он закрыт как WONTFIX, потому что он вызвал сбои в тестовом случае и после этого лучше будет сообщаться как спецификация спецификации JSF. Это было сделано как спецификация спецификации JSF 475 (во время JSF 1.2 уже). Я проверил MyFaces 2.2.9 на этом, и он также не запускает конвертер и, таким образом, предоставляет ту же спецификацию.

Однако техническая проблема понятна. null значение не имеет разумного getClass() , поэтому конвертор не может быть просмотрен классом значения таким образом. Он работает только тогда, когда конвертер явно зарегистрирован на компоненте.

Он должен работать, когда значение представляет собой пустую строку "" , что относительно тривиально реализовать в getValue() пользовательского рендеринга, расширяющего TextRenderer Mojarra.

Однако, когда я попробовал это сам здесь, он все еще не удался. Что получается, конвертер по-классу полностью пропускается, когда значение является экземпляром String . Он работает только тогда, когда конвертер явно зарегистрирован на компоненте. Скорее всего, это был надзор во время реализации спецификации 131 для JSF 1.2 (до этой версии конвертеры для String.class не поддерживались, и эта проблема только фиксировала ее для декодирования, а не для кодирования).

Это можно переопределить в том же настраиваемом рендерере (с вышеперечисленным getValue() override) с getFormattedValue() переопределением getFormattedValue() посредством которого конвертер явно просматривается.

Обратите внимание, что вам не нужно проверять UIInput поскольку вы явно зарегистрировали свой собственный рендерер только в javax.faces.Output / javax.faces.Text семейства компонентов / типов (т. javax.faces.Text Он будет работать только на компонентах <h:outputText> ).

Тем не менее, лучшим решением по-прежнему является создание EL-функции или файла тегов для этого.

📎📎📎📎📎📎📎📎📎📎