页面属性中的AEM页面图像不';不要使用吊索:resourceType

页面属性中的AEM页面图像不';不要使用吊索:resourceType,aem,Aem,使用AdobeExperienceManager5.6.1(AEM)(原名CQ5),我尝试创建一个新选项卡,类似于页面属性中的图像选项卡。它将被命名为“标志” 我基本上只是复制了图像选项卡来创建徽标选项卡,并重命名了路径以反映徽标的用途。例如,我将filereferenceparameter设置为/logo/fileReference,将requestSuffix设置为/logo.img.png 当我编辑属性时,我可以像使用“图像”选项卡一样将图像拖动到选项卡中,但是,图像从未出现在那里。我猜这

使用AdobeExperienceManager5.6.1(AEM)(原名CQ5),我尝试创建一个新选项卡,类似于页面属性中的图像选项卡。它将被命名为“标志”

我基本上只是复制了图像选项卡来创建徽标选项卡,并重命名了路径以反映徽标的用途。例如,我将
filereferenceparameter
设置为
/logo/fileReference
,将
requestSuffix
设置为
/logo.img.png

当我编辑属性时,我可以像使用“图像”选项卡一样将图像拖动到选项卡中,但是,图像从未出现在那里。我猜这是因为默认图像处理程序没有接收请求。错误是:

无法将请求送达 /content/my site/home page/en_us/jcr:content/logo.img.png in org.apache.sling.servlets.get.DefaultGetServlet

当我查看内容节点时,没有
sling:resourceType
。当我添加了
foundation/components/adaptiveimage
资源类型时,它就工作了。但是,我注意到“Image”节点没有
sling:resourceType
。我猜基础页中的 img.png.java < /Cuff> servlet正在处理这个请求。 我试着在我的页面组件中创建一个
logo.img.png.jsp
文件来处理请求,但这似乎不起作用


如何让AEM添加
sling:resourceType
或处理请求?

使用图像小部件控件时有点麻烦——只有图像组件可以很好地处理数据,而处理“.img”的servlet与图像组件resourceType绑定

最简单的方法是只使用fileReference属性的值,而不是将图像作为页面的一部分引用。因为您使用的是DAM的资产,所以这是一种合理的方法

这并不能解决用户直接上传图像的问题。我想建议使用一个像“/logo/sling:resourceType”这样的隐藏字段,但在本地进行测试会导致在试图保存对话框时出错

另一种方法是:

<sling:include resourceType="foundation/components/adaptiveimage" resource="${resource.path}/logo" />

(假设
资源
是jcr:content)。这实际上与添加sling:resourceType相同,但至少有两个缺点:

  • 此时图像将成为可创作的,而不是在对话框中
  • 此方法仅适用于呈现普通标记。它不适用于任何类型的背景图像

  • 好吧,经过一段时间的实验,这就是我最终要做的,让它工作。如果有更简单的方法,我很乐意知道

    首先,我复制了
    /libs/foundation/components/page/img.png.java
    文件,并对其进行了一些修改,将其添加到我的编译包中

    @SlingServlet(
            resourceTypes = "sling/servlet/default",
            selectors = "imgnode",
            extensions = {"png","jpg","jpeg","gif"},
            methods = "GET"
    )
    public class SimpleImageServlet extends AbstractImageServlet {
    
    其中
    img.png.java
    有以下行:

    Image image = new Image(c.resource, "image");
    
    我把它改成:

    Image image = new Image(c.resource);
    
    这依赖于SCR注释来生成OSGi配置,因此此servlet将使用
    imgnode
    选择器处理图像请求。它不需要查找子
    图像
    节点,只需要当前资源是图像

    第二,我在页面组件的body.jsp覆盖中添加了一个组件,如下所示

    <cq:include path="logo" resourceType="/apps/my-site/components/logo" />
    
    我相信这一步将是类似的,如果自适应图像被覆盖。您只需要呈现包含
    imgnode
    选择器的URL

    Fourth,我在页面属性中设置logo image对话框选项卡,以使用预期的
    requestSuffix
    ,并将其他属性设置为指向logo子节点

    示例:

    requestSuffix = "/logo.imgnode.png"
    fileReferenceParameter = "./logo/fileReference"
    
    requestSuffix = ".imgnode.png"
    fileReferenceParameter = "./fileReference"
    
    Fifth,我确保
    /apps/my site/components/logo
    组件的图像对话框选项卡指向自身

    示例:

    requestSuffix = "/logo.imgnode.png"
    fileReferenceParameter = "./logo/fileReference"
    
    requestSuffix = ".imgnode.png"
    fileReferenceParameter = "./fileReference"
    

    现在,无论是在页面属性、组件编辑还是最终呈现中,图像都得到了适当的处理。

    我遇到了类似的问题,我找到了一种更简单的解决方法。您只需在您的
    徽标
    图像下添加一个
    隐藏的
    x类型,如下所示:

    <yourlogo
        jcr:primaryType="cq:Widget"
        <-- other properties -->
        xtype="html5smartimage">
    
        <items jcr:primaryType="cq:WidgetCollection">
            <resType
                jcr:primaryType="cq:Widget"
                ignoreData="{Boolean}true"
                name="./logo/sling:resourceType"
                value="foundation/components/image"
                xtype="hidden"/>
        </items>
    
    </yourlogo>
    
    
    
    感谢您提供这些有用的信息。然而,我无法让这两个工作的网页编辑和网页属性。我尝试将
    资源
    更改为
    路径
    ,这在页面中起到了一定的作用,但我无法使组件和页面对话框协调工作。我想知道您是否有机会查看我下面的答案?祝你愉快:我对这种方法很感兴趣。我会尝试一下,如果可行的话,我会选择这个作为答案。这很有效,而且似乎是实现目标最干净、最自然的方式。FWIW,让我恼火的一件事是Chrome中“fallbackUrl”的JavaScript错误。第一幅图像的默认格式副本后缀为“/jcr:content/renditions/cq5dam.web.1280.1280”,如果不存在,则返回“/\u jcr\u content/renditions/original”。然而,在Chrome中,回退失败。(CQ 5.6.1)使用FF或在覆盖的adaptiveimage对话框图像中添加renditionSuffix=“/\u jcr\u content/renditions/original”,解决了该问题。这种方法对我很有效。我该如何处理触摸界面的问题?@saravana很长时间没有使用CQ5,所以不知道如何处理触摸界面的问题@团当,我也发现了如何在触摸屏上实现这一点。与图像节点并行,需要创建具有隐藏属性和值集的重新类型节点。