Magnolia CMS - 在 class SelectFieldDefinition 的内容应用程序中呈现时如何更改值?
Magnolia CMS - How can i change the value when i render in a content app of the class SelectFieldDefinition?
我有一个事件内容应用程序,当我创建一个新事件时,我有一个属于 class SelectFieldDefinition 的字段。
在我的字段定义中,有多项选择的节点 "options",我有 属性 "value",我在其中输入了我的选项字段的值
当我显示在内容应用程序中选择的选项时出现问题,因为它显示选项 "value" 而不是 属性 "label",而且它非常难看(在 apps/events/subApps/browser/workbench/contentViews/tree/columns)
[选项值显示 属性 "label"][2]
[选择的选项显示 属性 "value"][3]
我阅读了文档,发现了一个名为 "valueProperty" 的 属性,但它不起作用
我也读过这个 https://documentation.magnolia-cms.com/display/DOCS/Transforming+field+values
我找不到这个问题
您需要编写自己的格式化程序 class,请参阅 https://documentation.magnolia-cms.com/display/DOCS/Column+definition - 转换器 classes 用于将对话框中的 Vaadin 项目转换为 JCR 形式(反之亦然)。
现在我可以进入格式化程序 class 但我不知道如何更改标签的值
if (NodeUtil.isNodeType(node, EventsNodetypes.Events.NAME)) {
// if the node has been mark as deleted, most of its properties - e.g. lastName, firstName - has been removed
if(node.hasProperty("jcrCountry") ){
node.getName();
return PropertyUtil.getString(node, "jcrCountry", " ");
}else{
return node.getName();
}
}
只有我可以呈现 jcrName 属性 的相同 属性,这是我在创建事件
时在对话框中的第一个 属性
这是完整的class:
public class EventsNameColumnFormatter extends AbstractColumnFormatter<AbstractColumnDefinition> {
private static final Logger log = LoggerFactory.getLogger(AbstractColumnDefinition.class);
public EventsNameColumnFormatter(AbstractColumnDefinition definition) {
super(definition);
}
@Override
public Object generateCell(Table source, Object itemId, Object columnId) {
final Item jcrItem = getJcrItem(source, itemId);
if (jcrItem != null && jcrItem.isNode()) {
Node node = (Node) jcrItem;
try {
if (NodeUtil.isNodeType(node, NodeTypes.Folder.NAME)) {
return node.getName();
}
} catch (RepositoryException e) {
log.warn("Unable to get name of folder for column", e);
}
try {
if (NodeUtil.isNodeType(node, EventsNodetypes.Events.NAME)) {
// if the node has been mark as deleted, most of its properties - e.g. lastName, firstName - has been removed
if(node.hasProperty("jcrCountry") ){
node.getName();
return PropertyUtil.getString(node, "jcrCountry", " ");
}else{
return node.getName();
}
}
} catch (RepositoryException e) {
log.warn("Unable to get name of contact for column", e);
}
}
return "";
}
}
我有一个事件内容应用程序,当我创建一个新事件时,我有一个属于 class SelectFieldDefinition 的字段。 在我的字段定义中,有多项选择的节点 "options",我有 属性 "value",我在其中输入了我的选项字段的值
当我显示在内容应用程序中选择的选项时出现问题,因为它显示选项 "value" 而不是 属性 "label",而且它非常难看(在 apps/events/subApps/browser/workbench/contentViews/tree/columns)
[选项值显示 属性 "label"][2]
[选择的选项显示 属性 "value"][3]
我阅读了文档,发现了一个名为 "valueProperty" 的 属性,但它不起作用
我也读过这个 https://documentation.magnolia-cms.com/display/DOCS/Transforming+field+values
我找不到这个问题
您需要编写自己的格式化程序 class,请参阅 https://documentation.magnolia-cms.com/display/DOCS/Column+definition - 转换器 classes 用于将对话框中的 Vaadin 项目转换为 JCR 形式(反之亦然)。
现在我可以进入格式化程序 class 但我不知道如何更改标签的值
if (NodeUtil.isNodeType(node, EventsNodetypes.Events.NAME)) {
// if the node has been mark as deleted, most of its properties - e.g. lastName, firstName - has been removed
if(node.hasProperty("jcrCountry") ){
node.getName();
return PropertyUtil.getString(node, "jcrCountry", " ");
}else{
return node.getName();
}
}
只有我可以呈现 jcrName 属性 的相同 属性,这是我在创建事件
时在对话框中的第一个 属性这是完整的class:
public class EventsNameColumnFormatter extends AbstractColumnFormatter<AbstractColumnDefinition> {
private static final Logger log = LoggerFactory.getLogger(AbstractColumnDefinition.class);
public EventsNameColumnFormatter(AbstractColumnDefinition definition) {
super(definition);
}
@Override
public Object generateCell(Table source, Object itemId, Object columnId) {
final Item jcrItem = getJcrItem(source, itemId);
if (jcrItem != null && jcrItem.isNode()) {
Node node = (Node) jcrItem;
try {
if (NodeUtil.isNodeType(node, NodeTypes.Folder.NAME)) {
return node.getName();
}
} catch (RepositoryException e) {
log.warn("Unable to get name of folder for column", e);
}
try {
if (NodeUtil.isNodeType(node, EventsNodetypes.Events.NAME)) {
// if the node has been mark as deleted, most of its properties - e.g. lastName, firstName - has been removed
if(node.hasProperty("jcrCountry") ){
node.getName();
return PropertyUtil.getString(node, "jcrCountry", " ");
}else{
return node.getName();
}
}
} catch (RepositoryException e) {
log.warn("Unable to get name of contact for column", e);
}
}
return "";
}
}