[opencms-dev] JSON array from a list
Paoletti Corrado
c.paoletti at fineco.it
Tue Jan 11 09:49:52 CET 2022
FinecoBank S.p.A. - Internal Use Only
Hi,
finally I have obtain a JSON array without formatter's wrapper div: the JSON is written by template only when I publish file. I know the code is ugly but it works. I hope this may help someone.
<c:if test="${cms.isOnlineProject}">
<%
CmsJspActionElement cms = new CmsJspActionElement(pageContext, request, response);
CmsObject cmso = cms.getCmsObject();
Locale locale = cms.getRequestContext().getLocale();
String uri = cms.getRequest().getParameter("uri") == null ? cms.getRequestContext().getUri() : cms.getRequest().getParameter("uri");
CmsResource resourceViaPath = cmso.readResource(uri);
CmsJspContentAccessBean res = new CmsJspContentAccessBean(cmso, resourceViaPath);
// Get xml content file name... (e.g. /.content/newsroomList/newsroomList-00001.xml)
String xmlContentFileName = res.getRawContent().getStringValue(cmso, "Containers[1]/Elements[1]/Uri[1]", locale);
// ...then I read its content
CmsResource resourceViaPath2 = cmso.readResource(xmlContentFileName);
CmsJspContentAccessBean res2 = new CmsJspContentAccessBean(cmso, resourceViaPath2);
%>
[
<%for(int i=1; i<=res2.getRawContent().getValues("Item", locale).size(); i++) {%>
{
"id": "<%=res2.getRawContent().getValue("Item["+i+"]/Id[1]", locale).getStringValue(cmso)%>",
"categoria": "<%=res2.getRawContent().getValue("Item["+i+"]/Category[1]", locale).getStringValue(cmso)%>",
"tempoLettura": "<%=res2.getRawContent().getValue("Item["+i+"]/MinReading[1]", locale).getStringValue(cmso)%>",
"dataPubblicazione": "<%=res2.getRawContent().getValue("Item["+i+"]/Date[1]", locale).getStringValue(cmso)%>",
// ... and so on
}<%if(i<res2.getRawContent().getValues("Item", locale).size()) {%>,<%}%>
<%}%>
]
</c:if>
Corrado
From: opencms-dev <opencms-dev-bounces at opencms.org> On Behalf Of ????????? ?????? ???????
Sent: venerdì 24 dicembre 2021 13:41
To: The OpenCms mailing list <opencms-dev at opencms.org>
Subject: Re: [opencms-dev] JSON array from a list
We do not use formatter at all.
We made jsp file in public part of the site and pasted the code right in jsp file.
We iterate certain content type (NewsBlock) with Solr like this:
<c:set var='solrNewsQuery'>
{
"core" : "Solr Online",
"ignorequery" : true,
"ignoreReleaseDate" : false,
"ignoreExpirationDate" : false,
"queryparam" : ":",
"escapequerychars" : true,
"extrasolrparams" : "fq=parent-folders:\"${searchPath}\"&fq=type:NewsBlock&fq=category:Glavnaya&sort=Newsdate_prop desc",
"pagesize" : "10",
}
</c:set>
<cms:search configString="${solrNewsQuery}" var="search" addContentInfo="true" />
[
<c:forEach var="news" items="${search.searchResults}" varStatus="status">
.....
________________________________
От: opencms-dev <opencms-dev-bounces at opencms.org<mailto:opencms-dev-bounces at opencms.org>> от имени Paoletti Corrado <c.paoletti at fineco.it<mailto:c.paoletti at fineco.it>>
Отправлено: 24 декабря 2021 г. 15:32
Кому: The OpenCms mailing list
Тема: Re: [opencms-dev] JSON array from a list
FinecoBank S.p.A. - Internal Use Only
Hi,
finally when I publish the file I have JSON! Here the code in JSP formatter:
<%@page import="javax.servlet.http.HttpServletResponse,org.opencms.flex.CmsFlexController,org.apache.commons.lang3.StringEscapeUtils" %<mailto:%25 at page%20import=%22javax.servlet.http.HttpServletResponse,org.opencms.flex.CmsFlexController,org.apache.commons.lang3.StringEscapeUtils%22%20%25>>
<c:if test="${cms.isOnlineProject}">
<%
HttpServletResponse topLevelResponse = CmsFlexController.getController(request).getTopResponse();
topLevelResponse.setHeader("Content-Type","application/json;charset=UTF-8");
topLevelResponse.setHeader("Access-Control-Allow-Origin", "*");
%>
[
<c:forEach var="elem" items="${content.valueList.Item}" varStatus="status">
<c:set var="Id">${elem.value.Id}</c:set>
<c:set var="Category">${elem.value.Category}</c:set>
{
"id" : "<%=StringEscapeUtils.escapeEcmaScript(pageContext.getAttribute("Id").toString())%>",
}${status.last ? "" : ","}
</c:forEach>
]
</c:if>
The last little thing before perfection... My JSP template has:
<cms:container name="newsroom" type="page" editableby="ROLE.WORKPLACE_USER" maxElements="200">
<h4>Drag here newsroom element</h4>
</cms:container>
so JSON is:
<div id="newsroom" >
[
{
"name" : "giulio",
"surname": "cesare"
},
{
"name" : "dante",
"surname", "alighieri"
}
]
</div>
How can I remove the wrapping div?
Many thanks for your help!
Corrado
From: opencms-dev <opencms-dev-bounces at opencms.org<mailto:opencms-dev-bounces at opencms.org>> On Behalf Of ????????? ?????? ???????
Sent: giovedì 23 dicembre 2021 13:24
To: The OpenCms mailing list <opencms-dev at opencms.org<mailto:opencms-dev at opencms.org>>
Subject: Re: [opencms-dev] JSON array from a list
We made jsp file and use following code to return news items in json:
<%@page buffer="none" session="false" trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page import="javax.servlet.http.HttpServletResponse,org.opencms.flex.CmsFlexController,org.apache.commons.lang3.StringEscapeUtils" %<mailto:%25 at page%20import=%22javax.servlet.http.HttpServletResponse,org.opencms.flex.CmsFlexController,org.apache.commons.lang3.StringEscapeUtils%22%20%25>>
<%
HttpServletResponse topLevelResponse = CmsFlexController.getController(request).getTopResponse();
topLevelResponse.setHeader("Content-Type","application/json;charset=UTF-8");
topLevelResponse.setHeader("Access-Control-Allow-Origin", "*");
%>
<c:set var="searchPath">${cms.requestContext.siteRoot}/</c:set>
<c:set var='solrNewsQuery'>
{
"core" : "Solr Online",
"ignorequery" : true,
"ignoreReleaseDate" : false,
"ignoreExpirationDate" : false,
"queryparam" : ":",
"escapequerychars" : true,
"extrasolrparams" : "fq=parent-folders:\"${searchPath}\"&fq=type:NewsBlock&fq=category:Glavnaya&sort=Newsdate_prop desc",
"pagesize" : "10",
}
</c:set>
<cms:search configString="${solrNewsQuery}" var="search" addContentInfo="true" />
[
<c:forEach var="news" items="${search.searchResults}" varStatus="status">
<c:set var="convertId">${news.xmlContent.id}</c:set>
<c:set var="convertTitle">${news.xmlContent.value.Title}</c:set>
<c:set var="convertDescription">${news.xmlContent.value.ShortDescription}</c:set>
<c:set var="convertFullDescription">${news.xmlContent.value.FullDescription}</c:set>
<c:set var="convertPrewImg">https://www.mysite.ru<cms:link>${news.xmlContent.value.ImagePreview}</cms:link></c:set<https://www.mysite.ru%3ccms:link%3e$%7bnews.xmlContent.value.ImagePreview%7d%3c/cms:link%3e%3c/c:set>>
<c:set var="convertUrl">https://www.mysite.ru<cms:link>${news.xmlContent.filename}</cms:link></c:set<https://www.mysite.ru%3ccms:link%3e$%7bnews.xmlContent.filename%7d%3c/cms:link%3e%3c/c:set>>
<fmt:setLocale value="ru-RU"/>
<fmt:timeZone value="GMT+3:00">
<fmt:formatDate type = "both" dateStyle = "long" timeStyle = "long" value = "${cms:convertDate(news.xmlContent.value.Date)}" var="fullDate"/>
<c:set var="formatedDateArray" value='${fn:split(fullDate, " ")}' />
</fmt:timeZone>
<c:set var="convertDate">${formatedDateArray[0]} ${formatedDateArray[1]} ${formatedDateArray[2]}</c:set>
{
"id" : "<%=StringEscapeUtils.escapeEcmaScript(pageContext.getAttribute("convertId").toString())%>",
"date" : "<%=StringEscapeUtils.escapeEcmaScript(pageContext.getAttribute("convertDate").toString())%>",
"title": "<%=StringEscapeUtils.escapeEcmaScript(pageContext.getAttribute("convertTitle").toString())%>",
"short_description": "<%=StringEscapeUtils.escapeEcmaScript(pageContext.getAttribute("convertDescription").toString())%>",
"full_description": "<%=StringEscapeUtils.escapeEcmaScript(pageContext.getAttribute("convertFullDescription").toString().replaceAll("src=\"","src=\"https://www.mysite.ru").replaceAll("\\<iframe[^>]*><file://%3ciframe[%5e%3e]*%3e>","").replaceAll("\\<a[^>]*><file://%3ca[%5e%3e]*%3e>",""))%>",
"url": "<%=StringEscapeUtils.escapeEcmaScript(pageContext.getAttribute("convertUrl").toString())%>",
"img": "<%=StringEscapeUtils.escapeEcmaScript(pageContext.getAttribute("convertPrewImg").toString())%>"
}${status.last ? "" : ","}
</c:forEach>
]
________________________________
От: opencms-dev <opencms-dev-bounces at opencms.org<mailto:opencms-dev-bounces at opencms.org>> от имени Paoletti Corrado <c.paoletti at fineco.it<mailto:c.paoletti at fineco.it>>
Отправлено: 23 декабря 2021 г. 15:15
Кому: opencms-dev at opencms.org<mailto:opencms-dev at opencms.org>
Тема: [opencms-dev] JSON array from a list
FinecoBank S.p.A. - Internal Use Only
Hi,
my target is to generate a JSON response from a list of users.
With one user <cms:jsonpart generates a correct JSON but when I use it inside a <c:forEach I obtain only the last user so I deduce that <cms:jsonpart is not sufficient.
Searching examples and documentation I find that I could use a combination of JSONArray and JSONObject and these objects are defined in cms taglibrary (https://documentation.opencms.org/javadoc/tld/cms/jsonarray.html)
So, I have write <cms:jsonarray but I have:
No tag "jsonarray" defined in tag library imported with prefix "cms"
Someone could suggest me the right way to follow to have a JSON array like this:
[
{"name":"giulio", "surname":"cesare"},
{"name":"dante", "surname":"alighieri"},
]
Another approach is to use Java (I am not Java programmer) so I have wrote:
<%@page import="org.opencms.json.JSONException, org.opencms.json.JSONArray, org.opencms.json.JSONObject"%<mailto:%25 at page%20import=%22org.opencms.json.JSONException,%20org.opencms.json.JSONArray,%20org.opencms.json.JSONObject%22%25>>
<%
JSONObject user = new JSONObject();
try {
user.put("name", "giulio");
user.put("surname", "cesare");
} catch (JSONException e) {
}
JSONArray userList = new JSONArray();
userList.put(user);
System.out.println( userList );
%>
but nothing happens.
Kind regards and Happy Christmas.
Corrado
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opencms.org/pipermail/opencms-dev/attachments/20220111/089ed876/attachment.htm>
More information about the opencms-dev
mailing list