0
crxで利用可能なすべてのタグを出力するコンポーネントを作成しようとしていますが、nullポインタ例外が発生しています。aemに利用可能なすべてのタグを表示
<%@include file="/libs/foundation/global.jsp"%>
<%@page import="java.util.*, com.day.cq.tagging.* " %>
<%@page import="com.aem.community.core.services.*" %>
<%@page import="com.aem.community.core.services.Impl.*" %>
<%
try {
com.aem.community.core.services.ListTags taglist = sling.getService(com.aem.community.core.services.ListTags.class);
Map tagnames = taglist.ListAllTags();
out.print(tagnames);
} catch(Exception e){
out.print(e); }
%>
package com.aem.community.core.services;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public interface ListTags {
\t public Map ListAllTags();
}
package com.aem.community.core.services.Impl;
import java.util.Iterator;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Session;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aem.community.core.services.ListTags;
import com.aem.community.core.services.SearchService;
import com.day.cq.tagging.Tag;
import java.util.HashMap;
import java.util.Map;
@Component
@Service
public class ListTagsImpl implements ListTags {
\t protected final Logger log = LoggerFactory.getLogger(this.getClass());
\t private Session session;
\t @Reference
\t private ResourceResolver resourceResolver;
\t
\t @Override
\t public Map ListAllTags() {
\t
\t \t try {
\t \t \t Map<String, String> myHashMap = null;
\t \t Resource tagResource = resourceResolver.getResource("/etc/tags");
\t \t if (tagResource!= null) {
\t \t \t
\t \t final Iterable<Resource> children = tagResource.getChildren();
\t \t final Iterator<Resource> itr = children.iterator();
\t \t while (itr.hasNext()) {
\t \t final Resource item = itr.next();
\t \t final Tag tag = item.adaptTo(Tag.class);
\t \t if (tag != null) {
\t \t \t
\t \t Iterator<Tag> childitr = tag.listAllSubTags();
\t \t while (childitr.hasNext()) {
\t \t final Tag childitem = childitr.next();
\t \t myHashMap.put((String)tag.getName(),(String)childitem.getName());
\t \t }
\t \t }
\t \t }
\t \t }
\t session.logout();
\t return myHashMap;
\t \t
\t
\t \t
\t \t
\t \t }
\t \t catch(Exception e){
\t \t log.info(e.getMessage());
\t \t
\t \t
}
\t \t return null;
\t }}
そしてCRXのコードを作成しました しかし、サービスによってマップに返された値をコンポーネントのjspにフェッチできません。 java.lang.NullPointerExceptionが発生しています
を参照することができます。APIを学ぶ練習として、またはいくつかのビジネス要件を満たそうとしていますか?後者が当てはまる場合は、おそらくタグのリストを取得するより良い方法があります。率直に言って、私はあなたがなぜそれをやるのかは分かりません。 – toniedzwiedz
また、NullPointerExceptionのスタックトレースを共有してもよろしいですか? – Jens
カップルの指針:1)TagManager APIを使用する。2)JSPスクリプトレットを避ける。詳細:https://docs.adobe.com/docs/en/aem/6-2/develop/ref/javadoc/com/day/cq/tagging/TagManager.html – mickleroy