これを実現する最も簡単な方法は、 を含めて、既にスコープ内にあるオブジェクトを/libs/foundation/global.jsp
使用することです。properties
${properties.foo}
次のように、コンポーネント jsp の先頭に global.jsp を含めます。
<%@include file="/libs/foundation/global.jsp"%>
ファイル内のコメントが示すように、基本的には、JSP で使用する Sling (sling)、CQ (cq)、および JSTL (c,fmt,fn) の taglib 名前空間を登録します。
次に、cq:defineObjects
taglib の助けを借りて、多くの有用なオブジェクトをスコープに取り込みます。
<cq:defineObjects />
リストは次のとおりです。
@param slingRequest SlingHttpServletRequest
@param slingResponse SlingHttpServletResponse
@param resource the current resource
@param currentNode the current node
@param log default logger
@param sling sling script helper
@param componentContext component context of this request
@param editContext edit context of this request
@param properties properties of the addressed resource (aka "localstruct")
@param pageManager page manager
@param currentPage containing page addressed by the request (aka "actpage")
@param resourcePage containing page of the addressed resource (aka "myPage")
@param pageProperties properties of the containing page
@param component current CQ5 component
@param designer designer
@param currentDesign design of the addressed resource (aka "actdesign")
@param resourceDesign design of the addressed resource (aka "myDesign")
@param currentStyle style of the addressed resource (aka "actstyle")
これは、cq:defineObjects taglib を使用するだけで、JSP 式言語 (EL) を介してプロパティ ValueMap にアクセスできることを意味します。JSP 内のプロパティにアクセスするために追加の変換は必要ありません。
<c:out value="${properties.foo}" />
独自の Java taglib または Bean 内のプロパティにアクセスするには、標準の JSTL タグを使用して適切なオブジェクトをコードに渡すだけです。リクエスト全体、現在のリソース、またはプロパティのみを渡すことができます。リクエスト全体を渡すと、Java コードは現在のリソースと、プロパティ ValueMap を含む cq:defineObjects taglib によって作成されたすべてのオブジェクトにアクセスできるようになります。
JSP の場合:
<jsp:useBean id="mybean" scope="request" class="com.my.impl.TheBean">
<jsp:setProperty name="mybean" property="slingRequest" value="${slingRequest}"/>
<jsp:setProperty name="mybean" property="resource" value="${resource}"/>
<jsp:setProperty name="mybean" property="properties" value="${properties}"/>
</jsp:useBean>
豆で:
public void setSlingRequest(final SlingHttpServletRequest slingRequest) {
this.slingRequest = slingRequest;
// Use the one created by cq:defineObjects
this.properties = (ValueMap)this.slingRequest.getAttribute("properties");
// OR adapt the resource
this.properties = this.slingRequest.getResource().adaptTo(ValueMap.class);
}
public void setResource(final Resource resource) {
this.resource = resource;
this.properties = this.resource.adaptTo(ValueMap.class);
}
public void setProperties(final ValueMap properties) {
this.properties = properties;
}