首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >页面属性中的AEM页面图像不应用吊索:资源类型

页面属性中的AEM页面图像不应用吊索:资源类型
EN

Stack Overflow用户
提问于 2013-09-09 13:22:01
回答 3查看 8.8K关注 0票数 3

使用AdobeExperienceManager5.6.1(以前的CQ5),我正在尝试创建一个新的选项卡,类似于Properties中的Image。它将被命名为“标志”。

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

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

无法在/content/my-site/home-page/en_us/jcr:content/logo.img.png中向org.apache.sling.servlets.get.DefaultGetServlet提供请求

当我查看内容节点时,没有sling:resourceType。当我添加一种资源类型的foundation/components/adaptiveimage时,它就起作用了。但是,我注意到“图像”节点没有sling:resourceType。我猜基础页面中的img.png.java servlet正在处理该请求。

我尝试在页面组件中创建一个logo.img.png.jsp文件来处理请求,但这似乎行不通。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-21 21:10:05

我正面临着类似的问题,我找到了一个更简单的方法来解决。您所需要做的就是在hidden映像下添加一个logo x类型,如下所示:

代码语言:javascript
复制
<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>
票数 5
EN

Stack Overflow用户

发布于 2013-09-11 19:30:33

嗯,经过一段时间的实验,这就是我最后要做的,让它起作用。如果有更简单的方法,我很乐意知道。

First,我复制了/libs/foundation/components/page/img.png.java文件,并将其添加到编译后的包中,并做了一些修改。

代码语言:javascript
复制
@SlingServlet(
        resourceTypes = "sling/servlet/default",
        selectors = "imgnode",
        extensions = {"png","jpg","jpeg","gif"},
        methods = "GET"
)
public class SimpleImageServlet extends AbstractImageServlet {

其中img.png.java有以下行:

代码语言:javascript
复制
Image image = new Image(c.resource, "image");

我把它改成:

代码语言:javascript
复制
Image image = new Image(c.resource);

这依赖于SCR注释来生成OSGi配置,以便该servlet能够处理具有imgnode选择器的图像请求。它不是寻找子image节点,而是希望当前资源是图像。

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

代码语言:javascript
复制
<cq:include path="logo" resourceType="/apps/my-site/components/logo" />

这会将徽标路径映射到组件以进行呈现。

第三,在组件的logo.jsp中,我将选择器设置为imgnode而不是img

代码语言:javascript
复制
Image img = new Image(resourcePage, "logo");
img.setSelector("imgnode");

我相信,如果自适应图像被覆盖,这一步骤将是相似的。您只需要呈现包含imgnode选择器的URL。

第四,我在页面属性中设置了logo图像对话框选项卡,以使用预期的requestSuffix,并将其他属性设置为指向徽标子节点。

示例:

代码语言:javascript
复制
requestSuffix = "/logo.imgnode.png"
fileReferenceParameter = "./logo/fileReference"

第五,我确保/apps/my-site/components/logo组件的图像对话框选项卡指向自己。

示例:

代码语言:javascript
复制
requestSuffix = ".imgnode.png"
fileReferenceParameter = "./fileReference"

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

票数 1
EN

Stack Overflow用户

发布于 2013-09-10 18:26:59

这对使用图像小部件控件有点麻烦--只有图像组件很好地处理数据,处理".img“的servlet绑定到图像组件resourceType。

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

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

另一种办法是:

代码语言:javascript
复制
<sling:include resourceType="foundation/components/adaptiveimage" resource="${resource.path}/logo" />

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

  1. 此时图像变得可授权,而不是在对话框中。
  2. 此方法仅适用于呈现普通标记。它不适用于任何背景图像
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18699233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档