jPALIO MVC wspiera mechanizm wiązania parametrów żądania do pól klasy argumentu oznaczonego adnotacją RequestBean. Adnotacją tą może być oznaczonych wiele argumentów metody obsługującej żądanie. W przypadku gdy podana klasa zawiera pola o typach, które nie mogą zostać automatycznie przekonwertowane z danych żądania na wartość danego typu (pola złożone lub na przykład data (konwersja zależy od formatu w jakim została przesłana) należy zarejestrować własny edytor dla danego pola. Aby tego dokonać należy nadpisać metodę initDataBinder w klasie bazowej kontrolera.
Przykładowa implementacja metody initBinder:
protected void initDataBinder(String beanName, jpalio.commons.bind.DataBinder dataBinder) {
if ("bean".equals(beanName)) {
dataBinder.registerEditor(SampleBean.class, new SampleBeanEditor())
}
if ("bean1".equals(beanName)) {
dataBinder.registerEditor(SampleBean.class, new SampleBeanEditor())
}
}
Klasa edytora:
public class SampleBeanEditor extends java.beans.PropertyEditorSupport { @Override public void setAsText(String text) { setValue(new SampleBean(id:Long.valueOf(text))); } }
Nazwa beana pełni kluczową rolę przy wiązaniu danych. Stanowi ona prefiks nazwy dla wszystkich parametrów użytych do wiązania. W przypadku gdy nazwa nie jesta podana używane są wszystkie parametry.
Klasa palio.mvc.SampleBean:
package palio.mvc;
public class SampleBean {
Long id
String name
String description
SampleBean internalBean
public String toString() {
return "SampleBean[id:${id}, name=${name}, description=${description}, internalBean=${internalBean}]"
}
}
Formularz:
<form method="post" action="$page.url($currentPageCode())">
<input type="text" name="bean.id" value="123">
<input type="text" name="bean.name" value="Bean name">
<input type="text" name="bean.description" value="Bean description">
<select name="bean.internalBean">
<option value="1">bean with id = 1</option>
<option value="2">bean with id = 2</option>
<option value="3">bean with id = 3</option>
</select>
<button type="submit" name="requestHandler" value="beanTest">Send</button>
</form>
Metoda beanTest w kontrolerze:
@RequestHandler(view="palio.mvc.beanTest")
public Object[] beanTest(
@RequestBean(name="bean") SampleBean bean,
) {
// Do anything ...
return [bean]
}
Treść obiektu palio.mvc.beanTest:
$#params(palio.mvc.SampleBean bean)
<h1>$@bean.toString()</h1>
Przykładowa inicjalizacja mechanizmu wiązania danych oraz implementacja edytora została przedstawiona powyżej.