...
Konfiguracja deskryptora
W tej części stworzymy pierwszy kontroler, który zwróci prosty widok. Widok będziemy mogli wyświetlić klikając na odpowiedni link w menu systemowym (wtyczka doda odpowiedni link).
Wymagane moduły:
Deklaracja tych modułów odbywa się w deskryptorze wtyczki:
Code Block | ||
---|---|---|
| ||
<?xml version="1.0" encoding="UTF-8"?>
<plugin key="com.suncode.plugin-tutorial" name="Tutorial Plugin">
<plugin-details>
<description>
<localized language="en">Description</localized>
<localized language="pl">Opis</localized>
</description>
<author>Suncode</author>
</plugin-details>
<!-- I18N -->
<i18n key="i18n-bundle" location="locale/messages" />
<!-- Web MVC -->
<web-mvc key="mvc" />
</plugin>
|
Stworzenie strony
Kontroler odpowiedzialny jest za przyjęcie żądania HTTP i zwrócenie widoku albo innej odpowiedzi (np. json).
Nasz kontroler będzie wyświetlał widok w odpowiedzi na żądanie /hello oraz odpowiadał obiektem json w odpowiedzi na /api/hello.
Code Block | ||
---|---|---|
| ||
package com.suncode.plugin.tutorial;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController
{
@RequestMapping( value = "/hello", method = RequestMethod.GET )
public String showHelloView( Model model )
{
// dodajemy do modelu atrybut "date"
model.addAttribute( "date", new Date() );
// wyświetlamy widok "/views/hello.ftl"
return "hello";
}
@RequestMapping( value = "/api/hello", method = RequestMethod.GET, produces = "application/json" )
@ResponseBody
public Map<String, Object> sayHello()
{
Map<String, Object> result = new HashMap<String, Object>();
result.put( "say", "hello" );
result.put( "date", new Date() );
// zwracamy mapę, która zostanie przetworzona na obiekt json
return result;
}
}
|
Widok wyświetli prosty tekst i przesłaną z kontrolera datę:
Code Block | ||||
---|---|---|---|---|
| ||||
<p>Hello World</p>
<p>Current date: ${date?datetime}</p> |
Info |
---|
Widoki muszą być wykonane w technologii Freemarker. Wszystkie widoki muszą znajdować się w katalogu /views i mieć rozszerzenie .ftl (katalog i rozszerzenie są automatycznie dodawane do nazwy zwróconego widoku). |
Tip |
---|
Standardowo Eclipse nie posiada wbudowanego edytora szablonów Freemarker. Taki edytor wchodzi w skład jBoss Tools. |
Struktura projektu jest następująca:
Po zainstalowaniu/aktualizacji wtyczki możemy wypróbować działanie naszego kontrolera. W tym celu należy wysłać żądanie na odpowiedni adres URL:
Info |
---|
Wszystkie adresy URL wtyczki poprzedzone są prefixem składającym się z /plugin/{identyfikator wtyczki}/ (np. /plugin/com.suncode.plugin-tutorial/) |
- /plugin/com.suncode.plugin-tutorial/hello
Info Wszystkie widoki zwracane przez wtyczkę są domyślnie dekorowane (za wyjątkiem żądań z nagłówkiem X-Requested-With: XMLHTTPREQUEST.
Jeżeli nie chcemy dekorować naszej strony, musimy dodać parametr: decorator=none (np: /plugin/com.suncode.plugin-tutorial/hello?decorator=none)
- /plugin/com.suncode.plugin-tutorial/api/hello
Code Block language javascript title json {"say":"hello","date":1399446110308}