Заполните значения в раскрывающемся списке

У меня есть узел, в котором есть свойство, которое содержит формат JSON, который требуется раскрыть.

[{"text":"Type1","value":"Type1"},{"text":"Type2","value":"Type2"},{"text":"333","value":"333"}]

У меня есть fie options.json.jsp внутри компонента вместе с component.jsp

<%@include file="/libs/foundation/global.jsp"%><%
    response.setContentType("text/plain");
%><%
try {
        Node parent = resource.getResourceResolver().getResource("/etc/IgWebCMS/articletypes").adaptTo(Node.class);
        String json=parent.getProperty("json").getString();
        System.out.println("options json :::: "+json);
        }
     catch (RepositoryException re) {}
%>
        ${json}

В Stdout.log это показывает мне:

options json :::: [{"text":"Type1","value":"Type1"},{"text":"Type2","value":"Type2"},{"text":"333","value":"333"}]

И в раскрывающемся диалоговом окне я упомянул свойство options как: $PATH.options.json

Но в моем диалоге эти значения не заполняются. Любая идея.

Спасибо

1 ответ

Решение

Это не сработает, потому что ваш ${json} всегда будет пустой строкой, так как вы используете EL для отображения значения, но никогда не устанавливаете значение в первую очередь.

Чтобы использовать EL, у вас должно быть значение в PageContext, которое можно установить следующим образом.

<c:set var="json" value="<%= json %>" escapeXml="false" />

или же

pageContext.setAttribute("json", json);

Придя к тому, чтобы ваш код заработал, вы можете использовать json напрямую, используя скриптлет, такой как <%= json %> вместо ${ json } или вы можете установить значение pageContext изначально, а затем распечатать его, используя ${ json }

Но в случае, если вы пытаетесь использовать скриптлет, вам следует рассмотреть возможность изменения кода, поскольку переменная объявляется в блоке try, но используется вне его.

<%@ include file="/libs/foundation/global.jsp" %>
<%
response.setContentType("text/plain");
try {
    Node parent = resource.getResourceResolver().getResource("/etc/IgWebCMS/articletypes").
                        adaptTo(Node.class);
    out.print(parent.getProperty("json").getString());
} catch (RepositoryException re) {
    log.error(re.getMessage, re);
}
%>

И, наконец, если вы собираетесь сохранить весь json как свойство в каком-то узле, то вместо написания json.jsp для извлечения значений вы можете напрямую указать путь к свойству, в котором хранится значение. т.е. вместо $PATH.options.json вы можете напрямую указать как /etc/IgWebCMS/articletypes/json

Другие вопросы по тегам