Компоненты primefaces делают жизнь старообрядцев программистов, не желающих переходить на современные фронтендовые фреймворки, легкой и приятной, но не всегда служат серебряной пулей. С грустью осознав, что привычный textEditor не умеет обрабатывать html-теги и просто их экранирует, я заменила его на ckeditor – умный html-редактор, который, по заверению производителя, можно полностью кастомизировать.
Ckeditor действительно предоставляет большой набор функциональности и позволяет добавить в toolbar кучу радующих глаз опций, половиной из которых вы, скорее всего, пользоваться не будете: использовать элементы форматированного текста (фрагменты кода, таблицы, математические формулы, встроенные медиаресурсы и т. д.), производить вставку содержимого из Microsoft Word и Excel, настраивать цвет и язык редактора, задавать его размеры и т.д. и т.п.
Зато в режиме "source" можно работать со стилями и форматированием текста, чтобы верстать шаблоны писем и курсов:

Для искушенных пользователей ckeditor предоставляет развитую экосистему с множеством различных дополнений: проверка орфографии, плагины для работы с изображениями, CKFinder –файловый менеджер и загрузчик изображений и т.д.
Для использования ckeditor в проекте нужно:
- Добавить зависимость в pom.xml:
<dependency>
<groupId>org.primefaces.extensions</groupId>
<artifactId>primefaces-extensions</artifactId>
<version>8.0</version>
</dependency>
- Подключить пространство имен на html-странице:
xmlns:pe="http://primefaces.org/ui/extensions"
- Использовать соответствующий тег, перечислив в атрибуте "toolbar" необходимые функции:
<pe:ckEditor id="editor" value="#{editorController.content}" toolbar="[['Cut','Copy','Paste','PasteText','PasteFromWord','-', 'SpellChecker'], '/', ['Undo', 'Redo']]" skin="office2013">
<p:ajax event="save" listener="#{editorController.saveListener}" update="growl"/>
</pe:ckEditor>
Если вы все же хотите расширить стандартный набор опций toolbar'а, для его кастомизации лучше вынести настройки редактора в отдельный js-файл и не перечислять весь набор в каждом таком тэге. Сделать это можно, задав группы конфигураций в следующем формате:
CKEDITOR.editorConfig = function( config ) {
// Toolbar groups configuration.
config.toolbarGroups = [
{name: 'document', groups: ['mode', 'document', 'doctools']},
{name: 'clipboard', groups: ['clipboard', 'undo']},
'/',
{name: 'basicstyles', groups: ['basicstyles', 'cleanup']},
{name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align', 'bidi']},
{name: 'links'},
{name: 'insert'},
'/',
{name: 'styles'},
{name: 'colors'},
{name: 'tools'}
]
}
После чего редактор автоматически сгенерирует конфигурации, которые можно настраивать по элементам:
// Toolbar configuration generated automatically by the editor based on config.toolbarGroups.
config.toolbar = [
{
name: 'document',
groups: ['mode', 'document', 'doctools'],
items: ['Source']
},
{name: 'links', items: ['Link', 'Unlink', 'Anchor']},
{name: 'insert', items: ['Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar']},
{
name: 'clipboard',
groups: ['clipboard', 'undo'],
items: ['Cut', 'Copy', 'Paste', 'PasteText', '-', 'Undo', 'Redo']
},
...
];
Наконец, полученный файл необходимо подключить с помощью атрибута тэга customConfig="/js/ckeditor.js".
В следующей статье я расскажу о нескольких проблемах, связанных с работой со стилями и форматированием текста в этом редакторе, не переключайтесь:)