Aem 在CQ5.6中获取bean中的slingRequest
包括jsp顶部的Aem 在CQ5.6中获取bean中的slingRequest,aem,jcr,sling,Aem,Jcr,Sling,包括jsp顶部的libs/foundation/global.jsp,最终调用,从而实例化可以在Scriptlet中使用的slingRequest或currentNode变量。然而,我正在创建bean,并像这样包含它们 <jsp:useBean id="myBean" class="com.foo.bar.MyBean" /> <jsp:setProperty name="myBean" property="request" value="<%= slingRequest
libs/foundation/global.jsp
,最终调用
,从而实例化可以在Scriptlet中使用的slingRequest或currentNode变量。然而,我正在创建bean,并像这样包含它们
<jsp:useBean id="myBean" class="com.foo.bar.MyBean" />
<jsp:setProperty name="myBean" property="request" value="<%= slingRequest %>" />
在这里,我实例化bean并传递对当前请求的引用
我的问题是,如何避免必须传入此参数?有没有办法通过某种静态上下文获取对当前请求的引用,以便我可以在构造函数中设置bean属性?没有办法静态地将请求传递给新创建的bean(也没有办法,因为可能同时有多个请求,所以我们不能使用共享的静态变量来存储它)。您可以创建scriptlet:
<% pageContext.setAttribute("myBean", new MyBean(slingRequest)); %>
MyBean property: ${myBean.property}
MyBean属性:${MyBean.property}
或者去掉bean,使用Thomas提到的框架之一:
- ,
- ,
<jsp:useBean id="myBean" class="com.foo.bar.MyBean" />
<jsp:setProperty name="myBean" property="resourcePath" value="<%= slingRequest.getResourceURI() %>" />
<jsp:setProperty name="myBean" property="resourceResolver" value="<%= slingRequest.getResourceResolver() %>" />
public SlingHttpServletRequest getResourcePath() {
return resourcePath;
}
public void setResourceResolver(String resourcePath) {
this.resourcePath = resourcePath;
}
public SlingHttpServletRequest getResourceResolver() {
return resolver;
}
public void setResourceResolver(ResourceResolver resovler) {
this.resolver = resolver;
}
现在在bean类中,您可以使用resourcePath和ResourceResolver形成资源对象,如下所示:
Resource resource = resourceResolver.resolve(resourcePath);
如果只使用jsp:useBean,我不确定您是否可以访问PageContext,从它可以访问bean中的所有实例。我们有我们的bean的自定义标记,我们在其中注入请求之类的属性。你也可以考虑使用一个可用的框架:SLIN模型、切片、内巴…谢谢,这很好。最初尝试包括Sling模型和Slice with maven bundle插件都不起作用,但我会继续尝试。
Resource resource = resourceResolver.resolve(resourcePath);