java - 检查给定 UUID 的节点是否存在

标签 java freemarker uuid jcr magnolia

最佳答案

(请参阅下面我的更新,了解使用标准 Magnolia 指令的简单解决方案)

如何使用搜索searchfn

https://documentation.magnolia-cms.com/display/DOCS/searchfn

QueryUtil

https://nexus.magnolia-cms.com/content/sites/magnolia.public.sites/ref/5.4/apidocs/info/magnolia/cms/util/QueryUtil.html

并按 UUID 搜索:

https://wiki.magnolia-cms.com/display/WIKI/JCR+Query+Cheat+Sheet

SELECT * FROM [nt:base] WHERE [jcr:uuid] = '7fd401be-cada-4634-93fa-88069f46297b'
<小时/>

在 Freemarker 中使用它:

您可以将每个 Java 函数(例如搜索)包装在自定义 freemarker 指令中。

参见documentation.magnolia-cms.com/display/DOCS/Templating+functions

在你的模块 xml 中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module SYSTEM "module.dtd" >
<module>
  ...
  <components>
    <id>main</id>
    <component>
      <type>com.company.my.MyTemplatingFunctions</type>
      <implementation>com.company.my.MyTemplatingFunctions</implementation>
      <scope>singleton</scope>
    </component>  
  </components>
...

com.company.my.MyTemplatedFunctions.doesNodeExist() 调用 QueryUtil 标准类 - 或 SessionUtil,例如:

package com.company.my;

public class MyTemplatingFunctions {
    public boolean doesNodeExist(String workspace, String id){
        if ( SessionUtil.getNodeByIdentifier(workspace, id) != null ){
            return true;
        }
        return false;
    }
}

然后在您的.ftl中:

[#-- @ftlvariable name="myfn" type="com.company.my.MyTemplatingFunctions" --]
${myfn.doesNodeExist(relevantWorkspace, someUUID)}
<小时/>

==更新==

只需检查 Magnolia 文档:

https://documentation.magnolia-cms.com/display/DOCS/damfn#damfn-Getasset

这不起作用吗?

[#assign myAsset = damfn.getAsset("jcr:20d6e4e3-fe53-4b23-8d64-6e67a1c1667f")!]

然后您可以在 Freemarker 中使用 if/else 检查 myAsset 吗?

这看起来是最简单的解决方案。尚未测试过,但看起来应该可以将 UUID 与 jcr: 前缀一起传递。

此外:如果您不需要显式检查 Assets 是否存在,只是不想在日志中收到模板错误,您可以添加一个 ! ,如下所示:

${damfn.getAssetLink(<someUUID>)!}

那么您就不会收到模板错误,只会在日志中收到一条警告消息。

关于java - 检查给定 UUID 的节点是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40720134/

相关文章:

java - 无法将图片从 Firebase 存储加载到 Imageview

javascript freemarker springmvc spring.ftl

java - 在 Freemarker 中处理 null

JavaScript:GUID 冲突

ios - 哪个版本的 UUID 的第 3 部分的第一个字符是 0?

java - UUID 的数据类型作为 JPA 实体类中的主键

java - 加到 n 的 1 + 2 的所有组合

java - @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 不工作

javascript - 如何从 Freemarker 调用 JavaScript 函数?

java - 给定 View 类 [org.springframework.web.servlet.view.tiles3.TilesView] 不是 [org.springframework.web.servlet.view.AbstractUrlBasedView] 类型