使用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或处理请求?
发布于 2013-09-21 21:10:05
我正面临着类似的问题,我找到了一个更简单的方法来解决。您所需要做的就是在hidden映像下添加一个logo 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>发布于 2013-09-11 19:30:33
嗯,经过一段时间的实验,这就是我最后要做的,让它起作用。如果有更简单的方法,我很乐意知道。
First,我复制了/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选择器的图像请求。它不是寻找子image节点,而是希望当前资源是图像。
第二个,我向页面组件的body.jsp覆盖添加了一个组件,如下所示。
<cq:include path="logo" resourceType="/apps/my-site/components/logo" />这会将徽标路径映射到组件以进行呈现。
第三,在组件的logo.jsp中,我将选择器设置为imgnode而不是img。
Image img = new Image(resourcePage, "logo");
img.setSelector("imgnode");我相信,如果自适应图像被覆盖,这一步骤将是相似的。您只需要呈现包含imgnode选择器的URL。
第四,我在页面属性中设置了logo图像对话框选项卡,以使用预期的requestSuffix,并将其他属性设置为指向徽标子节点。
示例:
requestSuffix = "/logo.imgnode.png"
fileReferenceParameter = "./logo/fileReference"第五,我确保/apps/my-site/components/logo组件的图像对话框选项卡指向自己。
示例:
requestSuffix = ".imgnode.png"
fileReferenceParameter = "./fileReference"现在,无论是在页面属性、组件编辑还是最终呈现中,图像都会得到适当的处理。
发布于 2013-09-10 18:26:59
这对使用图像小部件控件有点麻烦--只有图像组件很好地处理数据,处理".img“的servlet绑定到图像组件resourceType。
最简单的方法是只使用fileReference属性的值,而不是将图像引用为页面的一部分。既然您使用的是DAM的资产,这是一个合理的方法。
这并不能解决用户直接上传图像的问题。我想建议使用一个隐藏字段,如"./logo/sling:resourceType",但是在尝试保存对话框时进行本地测试会导致错误。
另一种办法是:
<sling:include resourceType="foundation/components/adaptiveimage" resource="${resource.path}/logo" />(假设resource是jcr:content)。这实际上与添加吊索:resourceType相同,但至少有两个缺点:
https://stackoverflow.com/questions/18699233
复制相似问题