Я повреждаю голову против стены о том, что я думаю, была бы очень простая проблема для разрешения в Grails:
Скажите, что у меня есть подобная корзине модель; так класс Корзина, что hasMany объекты и каждый объект belongsTo корзина. В целом я не забочусь о порядке пунктов в корзине - я не забочусь о том, что приказывает, чтобы они были сохранены в, вычислены в, и т.д. ОДНАКО я действительно хочу ОТОБРАЗИТЬ их в том же порядке. Мне кажется, что эта логика должна смочь существовать ПОЛНОСТЬЮ в слое представления, но единственные решения, которые я смог найти, говорят мне объявлять объекты как SortedSet в образцовом слое. Это также влияет на мой слой контроллера, поскольку простые операции Списка, такие как .collect {} теперь требуют, чтобы дополнительный синтаксический переход вокруг для хранения преобразований типов исправил и сохранил мою сортировку.
Мне это гаек, таким образом, я должен пропускать что-то простое! Есть ли любой способ, например, сделать что-то как <g:each in="${cart.items.sort{it.name}}">
или что-то подобное, так, чтобы я мог осуществить последовательный порядок дисплея ТОЛЬКО в выводе / слой представления? РЕДАКТИРОВАНИЕ - Видит ответ Matt ниже; версия этого действительно на самом деле работает.
Спасибо за любой совет или указатели!
Я думаю, что ваш пример с твиттером хорош. Требуется база данных для долгосрочных данных. Не было бы большого пункта поместить твит в сообщение, потому что он должен быть в базе данных. Тем не менее, если вы вели чат комнаты то вы можете продолжить и поместить сообщение в очередь JMS, потому что вы не сохраняете его долго.
Это не то, что вы не можете поместить твит в JMS, это то, что вы должны поместить его в базу данных в любом случае.
-121--3879887-Я рекомендую вам взглянуть на книгу Грегора Хофа Узоров интеграции предприятия , в которой объясняется множество различных узоров для подходов на основе обмена сообщениями.
-121--3879884-Этот сторонний тэг , похоже, сделает то, что вам нужно. В противном случае всегда можно создать собственный тэг. Класс Тэга может выполнять сортировку следующим образом:
class SortTagLib {
static namespace = 'sort'
def sort = { attrs ->
// A closure that does the sorting can be passed as an attribute to the tag.
// If it is not provided the default sort order is used instead
def sorter = attrs.sorter ?: {item1, item2 -> item1 <=> item2}
sorter = sorter as Comparator
// The collection to be sorted should be passed into the tag as a parameter
Collections.sort(attrs.items, sorter)
}
}
Этот тэг можно использовать для сортировки коллекции объектов по свойству name:
<sort:sort items="someCollection" sorter="${someComparatorClosure}"/>
Коллекция, на которую ссылается someCollection
, будет отсортирована по месту при выполнении тэга.
Вы также можете использовать методы сортировки, доступные для коллекций / карт, как определено здесь: http://groovy.codehaus.org/api/org/codehaus/groovy/runtime/DefaultGroovyMethods .html
Лично я обнаружил, что это довольно легко сделать в сочетании с тегом
<!-- Books sorted by title -->
<g:each in="${ books.sort{a,b-> a.title.compareTo(b.title)} }">
<p>Title: ${it.title}</p>
<p>Author: ${it.author}</p>
</g:each>
Чтобы узнать о других способах управления коллекциями и картами, я рекомендую эту страницу и эту страницу соответственно.