Мы следовали этому руководству -> https://www.danklco.com/posts/2013/06/changing-cq-components-design-path.html, чтобы создать глобальное решение пути проектирования для нескольких компонентов для совместного использования дизайна, которое идеально подходит для классического диалогового окна дизайна пользовательского интерфейса.
public class GlobalDesignDialogTag extends BaseTag
{
/**
* Global design properties attribute name.
*/
public static final String GLOBAL_DESIGN_PROPERTIES_ATTRIBUTE_NAME = "globalDesignProperties";
private static final long serialVersionUID = 1L;
@Override public final int doEndTag()
{
final String
globalDesignPath =
getCurrentDesign().getPath() + "/" + JCR_CONTENT + "/" + getCurrentResource().getName();
EditContext editContext = getEditContext();
String currentDesignPath = getCurrentDesign().getPath() + "/jcr:content/default-page/par-main/secondary-nav";
if (WCMMode.fromRequest(getSlingRequest()) == WCMMode.DESIGN)
{
// Set the design dialog content path to be global design level instead of template
editContext.setContentPath(globalDesignPath);
}
if (AuthoringUIMode.fromRequest(getSlingRequest()).equals(AuthoringUIMode.TOUCH)) {
editContext.setContentPath(globalDesignPath);
}
final Resource globalDesignResource = getResourceResolver().getResource(globalDesignPath);
if (globalDesignResource != null)
{
// Set an attribute containing global design properties as ${currentStyle.propertyName} will still
// point to the default design dialog path under the template.
pageContext.setAttribute(GLOBAL_DESIGN_PROPERTIES_ATTRIBUTE_NAME,
globalDesignResource.adaptTo(ValueMap.class));
}
return EVAL_PAGE;
}
/**
* Gets the EditContext from the pageContext.
*
* @return The EditContext from the pageContext.
*/
private EditContext getEditContext()
{
return (EditContext) pageContext.getAttribute(DefineObjectsTag.DEFAULT_EDIT_CONTEXT_NAME);
}
/**
* Gets the current design from the pageContext.
*
* @return The current design from the pageContent.
*/
private Design getCurrentDesign()
{
if (pageContext.getAttribute(DefineObjectsTag.DEFAULT_CURRENT_DESIGN_NAME) != null)
{
return (Design) pageContext.getAttribute(DefineObjectsTag.DEFAULT_CURRENT_DESIGN_NAME);
}
return getCurrentResource().adaptTo(Design.class);
}
}
Теперь нам нужнообновить классический пользовательский интерфейс до сенсорного, который включает в себя множество обновлений компонентов, но мы по-прежнему хотим сохранить большую часть основного Java-кода без изменений или как можно меньше изменений.Но вышеприведенный метод обучения editContext.setContentPath(globalDesignPath);
не работает с диалоговым окном дизайна сенсорного интерфейса, кажется ... Пожалуйста, см. Рисунок ниже
Итак, что произошло с розовыми линиями, вКлассическое диалоговое окно дизайна пользовательского интерфейса - ожидаемое поведение, при использовании editContext.setContentPath(globel)
он сохраняет вторичный узел навигации диалогового окна дизайна на уровне шаблона дизайна.
Но с зелеными линиями, используя тот же пример кода, что и выше, открывается диалоговое окно дизайна.сохранить от сенсорного интерфейса, editContext.setContentPath(globel)
это не похоже на что-то сделал ... он сохранил узел под demo-site/jcr:content/default-page/par-main/secondary-nav
, который является уровнем дизайна страницы шаблона ... другой вторичный компонент навигации в другой шаблон дизайна страницы не сможетполучить доступ к свойствам.В идеале диалоговое окно дизайна сенсорного интерфейса должно делать то же, что и синие линии ... сохраняя диалоговое окно, оно должно обновить свойство узла demo-site/jcr:content/secondary-nav
После исследования я думаю, что наиболее подозрительная строка - editContext.setContentPath(globel)
,это сенсорный интерфейс, он имеет новый тип (EditContext)
объекта или API для сохранения диалогового окна дизайна сенсорного интерфейса в пользовательском пути?Пожалуйста, предложите с примером кода, если это возможно.Спасибо