设置defaultValue
不适用于select
- 字段或optionGroup
- Magnolia CMS with Blossom中的字段。
@TabFactory("pages.properties.label")
public void pageProperties(UiConfig cfg, TabBuilder tab) {
List<String> targetGroup = new ArrayList<>();
targetGroup.add("Group A");
targetGroup.add("Group B");
List<String> menuTeaser = new ArrayList<>();
menuTeaser.add("Teaser A");
menuTeaser.add("Teaser B");
tab.fields(
cfg.fields.text("pageTitle").label("pages.properties.pageTitle.label").i18n()
.description("pages.properties.pageTitle.description").i18n()
.defaultValue("any value").i18n() // works!
.requiredErrorMessage("pages.properties.pageTitle.requiredErrorMessage").i18n()
.required(),
cfg.fields.select("targetGroup").label("pages.properties.targetGroup.label").i18n()
.description("pages.properties.targetGroup.description").i18n()
.options(targetGroup)
.defaultValue(targetGroup.get(0)).i18n(), // doesn't work!
cfg.fields.optionGroup("menuTeaser").label("pages.properties.menuTeaser.label").i18n()
.description("pages.properties.menuTeaser.description").i18n()
.options(menuTeaser).i18n()
.defaultValue(menuTeaser.get(0)).i18n() // doesn't work!
.required(),
);
}
有趣的是,它适用于text
- 字段。
如何为其他字段类型完成此操作?
答案 0 :(得分:0)
您需要做的是在您要在选择中默认选择的选项上设置selected=true
。这是普通的Magnolia代码。对于Blossom和TabBuilder
,遗憾的是,它允许您将选项设置为仅字符串,而不是公开/允许传入整个SelectOption
。
您需要扩展TabBuilder
以创建自己的重载addSelect
方法。现有的看起来像:
public DialogSelect addSelect(String name, String label, String description, Collection<String> options) {
try {
DialogSelect select = DialogFactory.getDialogSelectInstance(
context.getRequest(),
context.getResponse(),
context.getWebsiteNode(),
null);
select.setName(name);
select.setLabel(label);
select.setDescription(description);
for (String option : options) {
select.addOption(new SelectOption(option, option));
}
tab.addSub(select);
return select;
} catch (RepositoryException e) {
throw new RuntimeRepositoryException(e);
}
}
在您的网站中,您希望传递Collection
个SelectOption
个项目。要将项目标记为已选中,只需拨打mySelectOption.setSelected(true)
。
或者,您可能希望将重载的代码作为补丁提供给Blossom本身。
HTH,
扬
答案 1 :(得分:0)
我没有以简单的方式运行您的建议。非常感谢,无论如何。
最终我解决了这个问题:
$('.button_place').each(function(a, b) {
$(this).append($('.button').eq(a).clone()).html()
})