Сценарий
- я написал API, который начал свою жизнь как набор API ответов на запросы json, используя vertx модель db памяти.Работает нормально.
тогда кто-то хотел хороший дисплей HTML, чтобы увидеть часть содержимого в этом приложении.
Так что я создал приложение grails, чтобы попытаться сделать для меня простые представления лесов - ноКонечно, нет никакой доменной модели как таковой.
Я создал remoteRequestController - который вызывает службу, которая вызывает json, входит в мое «основное приложение» и преобразует данные в объекты.
, так что для моегоперечисление запросов - я делаю GET и возвращаю массив json.Я преобразовываю этот список в локальные объекты «не в домене» и строю график в объектах с результатом
Мой сервис возвращает список моему контроллеру, который пытается поместить карту в представление.
Я попытался следовать соглашению Грааля - мой контроллер называется RemoteServiceRequestController, который вызывает RemoteServiceRequestService (выполняет удаленное получение / ответ и форматирование в объекты) - и представление находится в «remoteServiceRequest / list» с использованием переменнойвот так 'remoteServiceRequestList'
в этом gsp я ссылаюсь на элемент из карты модели 'remoteServiceRequestList'
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main" />
<g:set var="entityName" value="${message(code: 'request.label', default: 'ServiceRequest')}" />
<title><g:message code="default.list.label" args="[entityName]" /></title>
</head>
<body>
<a href="#list-customer" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content…"/></a>
<div class="nav" role="navigation">
<ul>
<li><a class="home" href="${createLink(uri: '/')}"><g:message code="default.home.label"/></a></li>
<li><g:link class="create" action="create"><g:message code="default.new.label" args="[entityName]" /></g:link></li>
</ul>
</div>
<div id="list-request" class="content scaffold-list" role="main">
<h1><g:message code="default.list.label" args="[entityName]" /></h1>
<g:if test="${flash.message}">
<div class="message" role="status">${flash.message}</div>
</g:if>
<p> "got map as ${params}: and" + "list as ${remoteServiceRequestCount}"</p>
<f:table collection="${remoteServiceRequestList}" />
<div class="pagination">
<g:paginate total="${remoteServiceRequestCount ?: 0}" />
</div>
</div>
</body>
</html>
в моем контроллере я пытаюсь сделать ответ, подобный этому
def list () {
....
List<Request> rlist = remoteRequestService.bindJsonToServiceRequestList(json)
//return either an empty list or result of query, view will convert list to
println "remote list returned $rlist, size :${rlist.size()}"
//response rlist, [model: [remoteServiceRequestCount: rlist.size()] ]
//Map model = [remoteServiceRequestList: rlist, remoteServiceRequestCount: rlist.size()]
Map model = ["remoteServiceRequestList": ["will","marian"]]
//render (view:'list', model:model )
//response rlist, [model: [remoteServiceRequestInstanceCount: rlist.size(), remoteServiceRequestInstanceList: rlist]]
ModelAndView mv = new ModelAndView()
mv.addAllObjects(model)
mv
}
Как видно из комментариев, пробовал несколько способов с нулевым эффектом.представление не будет отображать ответ в виде HTML, так как я думаю, что представление автоматически предполагает, что переменная представляет собой список объектов домена.Список составлен нормально, и я получаю ожидаемые значения - но массив объектов, который я создаю, только из классов из src / main / groovy
Кажется, я не могу получить доступ к переменным карты модели в представлении GSP (если они не являются объектами предметной области), что здесь не то, что мне нужно.
метод ответа очень проницателен и пытается внутренне разобраться в типе и содержимом - и создает переменную в картеконкретное имя (логически что-то вроде List - я пытался установить это явно с моим удаленным списком результатов, но я не могу получить его для отображения данных в представлении GSP
Вопрос Могу ли яиспользовать GSP для рендеринга HTML для переменных, хранящихся в карте модели, где объекты данных не являются бинами (например, мой массив запросов), и если да, то как мне это сделать? (я мог бы превратить объекты в бины, но не уверен, что это происходитпомогать или нет)
в противном случае мне придется выполнить какую-то ужасную необработанную обработку html и просто использовать render, чтобы вернуть это в браузер -вместо того, чтобы использовать сантехнику GSP для выполнения большей части тяжелой работы за меня.
Я надеялся, что это будет прямо вперед и превратилось в кошмар, борющийся с рамками
Требуется советпрежде чем раствориться во фрустрации и неработающем коде -
Я на самом деле не гений HTML-презентации (поэтому скаффолдинг был бы достаточно хорош) - но застрял в этой неспособности визуализировать ответ от данных вкарта в представлении gsp.
Цените любые мысли о том, как это можно сделать - или альтернативу, которая будет достаточно хороша, если бы я мог заставить работать строительные леса.