Wiązanie danych żądania

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.

Pełny przykład

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.