Добрый день!
Подскажите, чем заменили в Jmix ‘’‘userSettingService.saveSetting’’’ и ‘’‘userSettingService.loadSetting’’’ из Cuba?
Здравствуйте!
UserSettingService
бин есть и в Jmix. Он доступен, если есть зависимость:
implementation 'io.jmix.ui:jmix-ui-data-starter'
Она добавляется по умолчанию при создании нового проекта. Также при наличии данной зависимости можно пользоваться специальным фасетом: ScreenSettingsFacet :: Документация Jmix
Он по умолчанию сохраняет состояния компнентов, которые поддерживают сохранение настроек, если у них указан id.
1 симпатия
Роман, спасибо большое!
Похоже, в документации неточность… В разделе SaveSettings идет отсылка к ApplySettings )
Не получилось разобраться.
Не могли бы вы привести пример кода Сохранения и Восстановления настроек компонента tagPicker? Нужно сохранить и при повторном входе восстановить выбранные ранее теги?
У нас сделано так:
fun onSaveSettings(screenSettings: ScreenSettings) {
val tagsValue = tagPicker.value?.joinToString(",") { it.id.toString() }
val tokenListId = tagPicker.id
screenSettings.put(tokenListId, "value", tagsValue)
}
fun onApplySettings(screenSettings: ScreenSettings) {
val tokenListId = tagPicker.id
val tagsValueOptional = screenSettings.getString(tokenListId, "value")
if (tagsValueOptional.isPresent) {
val tagsValue = tagsValueOptional.get()
if (tagsValue.isEmpty()) return
val tagUuids = tagsValue.split(",").map { UUID.fromString(it) }
tagsDl.load()
tagPicker.value = tagsDc.items.filter {
tagUuids.contains(it.id)
}
}
}
2 симпатии
Примерно можно сделать так:
<facets>
<screenSettings id="screenSettingsFacet"/>
</facets>
@Autowired
private ScreenSettingsFacet screenSettingsFacet;
@Install(to = "screenSettingsFacet", subject = "saveSettingsDelegate")
private void screenSettingsFacetSaveSettingsDelegate(ScreenSettingsFacet.SettingsContext settingsContext) {
// получаем теги из TagPicker
String tags = "somehow_serialized_tags";
settingsContext.getScreenSettings()
.put("tagPicker", "tags", tags);
screenSettingsFacet.saveSettings();
}
@Install(to = "screenSettingsFacet", subject = "applySettingsDelegate")
private void screenSettingsFacetApplySettingsDelegate(ScreenSettingsFacet.SettingsContext settingsContext) {
String selectedTags = settingsContext.getScreenSettings()
.getString("tagPicker", "tags")
.orElse(null);
// парсим теги и устанавливаем в TagPicker
// можно удалить, если другие компоненты не должны применять настройки
screenSettingsFacet.applySettings();
}
1 симпатия
Спасибо, коллеги!