Migawki...

Biblioteka DWR umożliwia technologii JavaScript wydobywanie obiektów Java z bibliotek i używanie ich metod.

Grails i Groovy
Jak posortować mapę po wartościach w Groovym

W języku Groovy istnieje doskonale opracowany interfejs dla dynamicznych list i map. Sortowanie mapy po kluczu nie nastręcza żadnych problemów. Istnieje klasa TreeMap(), która z natury sortuje mapy:

def map = ["c":3, "b":2, "a":1]
def tm = new TreeMap(map)
assert tm == ["a":1, "b":2, "c":3]

ot i wszystko.

 

Nieco więcej problemów jest z posortowaniem mapy po wartości.

Dla listy istnieje metoda sort():

def list = [3, 2, 1]
assert [1, 2, 3] == list.sort()

Niestety dla mapy wywołanie metody sort w tej postaci nie jest możliwe. Można jednak zastosować drobny trick:

//sort by map values
def map = [a:3, b:2, c:1]
map = map.sort {it.value}
assert map == [c:1, b:2, a:3]

//sort by map values in reverse
map = [a:1, b:2, c:3]
map = map.sort {a, b -> b.value <=> a.value}
assert map == [c:3, b:2, a:1]

 

Proste, krótkie i skuteczne.

 
Richui and Accordion skin

Jeden z puginów do Grails, a mianowicie Accordion z całego zestawu, który nazywa się Richui, to fajne rozwiązanie dla dwupoziomowych menu. Twórca tego pluginu zapewnia, ze zmiana skórki i wyglądu jest bardzo prosta, bo wystarczy dodać jedynie znacznik "skin".

Miałoby to wyglądać mniej więcej tak:

domyślnie: <resource:accordion />

ze skórką o nazwie "blue": <resource:accordion skin="blue" />

 

W praktyce jednak zapomniał udokumentować gdzie powinna znajdować się ta czarodziejska skórka. Rozwiązanie okazało się niezbyt proste bo w nagłówku strony GSP powinien się znaleźć następujący zapis:

<link rel="stylesheet" href="/${resource(dir: 'css', file: 'myblueaccordion.css')}" />

no i oczywiście w folderze %nazwa_projektu%/web-app/css/ musi być plik myblueaccordion.css

Ciekawostka, nieprawdaż?

 

Jeśli zaś chodzi o zawartość pliku myblueaccordion.css, to można zmodyfikować skórkę domyślną, która znajduje się zwykle w lokalizacji:

%plugin_directory%/richui-0.7/web-app/css/accordion.css

 

Zawsze możesz skorzystać z naszego opracowania CSSu dla tej kontrolki.

 
Wyszukiwanie danych z wykorzystaniem wyrażeń regularnych

If you use Grails 1.2.0, you can call regexp expressions of your DB directly
with sqlRestriction-criteria
DomA.withCriteria{
sqlRestriction "name REGEXP 'test \d+ test'" //MySQL
}

finding all of this:

test 1 test
test 11 test
test 12test

 

Od wersji Grails 1.2.0 możesz użyć kryteriów z wykorzystaniem wyrażeń regularnych:

DomA.withCriteria{
sqlRestriction "name REGEXP 'test \d+ test'" //MySQL
}

znajduje wszystkie poniższe:

test 1 test
test 11 test
test 12test

 
Screencast Netbeans introduction to Groovy i Grails

Netbeans w swojej wersji 6.8 poprawiło nieco (powiedzmy sobie szczerze) swoje słabe wsparcie dla Grails. Z naszych doświadczen w jednym z projektów pisanych w wersji 6.7.1 Netbeans chodziło baaaardzo! powoli. Występowały częste zawieszenia serwera Jetty w momencie dynamicznej zmiany  zawartości klas domenowych i klas tzw. utility, ale najgorszy był praktyczny brak prawidłowych podpowiedzi po naciśnięciu kombinacji klawiszy Ctrl-Space.

Może Tobie pomogą samouczki Netbeans i Groovy: http://netbeans.org/kb/docs/java/groovy-quickstart.html

oraz Netbeans i Grails: http://netbeans.org/kb/docs/web/grails-quickstart.html

 
Krótki przewodnik jak napisać aplikację Grails w GWT UI
Krótko, schludnie i treściwie: http://code.google.com/p/derjanandhisblog/wiki/GWTGrailsTutorial