WedX - журнал о программировании и компьютерных науках

Узлы, добавленные на страницу, не сохраняются в CQ

У меня есть служба, которая пытается импортировать страницы блога в CQ 5.5.0. Я могу успешно создать страницу, но когда я добавляю узлы, представляющие контент, узлы не сохраняются. CQ не сообщает об ошибках, и я вижу узлы в сервисе сразу после создания. Но когда я смотрю на страницу в CRXDE Light, узлы не являются частью содержимого страницы. Раздел кода, который добавляет узлы, находится здесь:

    Node blogNode = blogPage.adaptTo(Node.class);
    logOutput( INFO, "blogPage name = "+ blogPage.getName() );
    // Create the author date node
    Node authorDateNode = blogNode.addNode("jcr:content/authorDate", "nt:unstructured");
    authorDateNode.setProperty("author", blog.getCreator());
    authorDateNode.setProperty("date", sdf.format(blog.getPublishDate().getTime()));
    authorDateNode.setProperty("sling:resourceType", "history/components/blog/authordate");

    // Create the content node
    Node blogPostNode = blogNode.addNode("jcr:content/blogPostBodyParSys", "nt:unstructured");
    blogPostNode.setProperty("sling:resourceType", "history/components/parsys");

    Node blogContentNode = blogNode.addNode("jcr:content/blogPostBodyParSys/text", "nt:unstructured");
    blogContentNode.setProperty("sling:resourceType", "history/components/text");
    blogContentNode.setProperty("text", blog.getContent());
    blogContentNode.setProperty("textIsRich", "true");

    // TODO: Test code only
    NodeIterator itr = blogNode.getNode("jcr:content").getNodes();
    while(itr.hasNext()) {
        Node child = itr.nextNode();
        logOutput(INFO, "Child node: " + child.getName(), 1 );
        PropertyIterator propItr = child.getProperties();
        while( propItr.hasNext() ) {
            Property prop = propItr.nextProperty();
            logOutput(INFO, "Property " + prop.getName() + ", value " + prop.getValue().getString(),2);
        }
    }

Тестовый код внизу отображает вновь созданные узлы и значения, как и ожидалось. Последнее, что происходит, — это вызов session.save перед выходом из службы.

Об ошибках не сообщается, но я не вижу узлов, когда смотрю на страницу. Кто-нибудь знает, что здесь может быть не так?

aem
11.02.2015

  • Вы сохраняете сессию? 12.02.2015

Ответы:


1

Как указал @Sharath Maddapa, вам нужно сохранить сеанс. Посмотрите изменения, сделанные в вашем коде.

    Node blogNode = blogPage.adaptTo(Node.class);
        logOutput( INFO, "blogPage name = "+ blogPage.getName() );
        // Create the author date node
        Node authorDateNode = blogNode.addNode("jcr:content/authorDate", "nt:unstructured");
        authorDateNode.setProperty("author", blog.getCreator());
        authorDateNode.setProperty("date", sdf.format(blog.getPublishDate().getTime()));
        authorDateNode.setProperty("sling:resourceType", "history/components/blog/authordate");

        // Create the content node
        Node blogPostNode = blogNode.addNode("jcr:content/blogPostBodyParSys", "nt:unstructured");
        blogPostNode.setProperty("sling:resourceType", "history/components/parsys");

        Node blogContentNode = blogNode.addNode("jcr:content/blogPostBodyParSys/text", "nt:unstructured");
        blogContentNode.setProperty("sling:resourceType", "history/components/text");
        blogContentNode.setProperty("text", blog.getContent());
        blogContentNode.setProperty("textIsRich", "true");
//YOU must save the session here.
    try {
    blogNode.getSession().save();
    } catch(Exception e) {// TODO Ideally log specific exceptions
    logOutput( ERROR, "Error saving jcr session ");
    }
        // TODO: Test code only
        NodeIterator itr = blogNode.getNode("jcr:content").getNodes();
        while(itr.hasNext()) {
            Node child = itr.nextNode();
            logOutput(INFO, "Child node: " + child.getName(), 1 );
            PropertyIterator propItr = child.getProperties();
            while( propItr.hasNext() ) {
                Property prop = propItr.nextProperty();
                logOutput(INFO, "Property " + prop.getName() + ", value " + prop.getValue().getString(),2);
            }
        }
12.02.2015
  • У меня уже был вызов session.save, который не отображался в моем блоке кода. Я попытался переместить файл session.save, как показано выше, но он все еще не сохраняет узлы. Любые другие идеи? Каков наилучший способ отладки такой проблемы? 12.02.2015

  • 2

    Я ценю ввод, и я, наконец, понял, что вызвало мою проблему: я создал два экземпляра ResourceResolver, поэтому сеанс, который я сохранял, явно отличался от сеанса, в котором создавались узлы. И эта сессия не сохранялась.

    12.02.2015
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]