2010-10-20 7 views
12

Jedną z zalet tego modelu jest to, że otrzymuje się indeks wiersza w tabeli. Ale uważam, że jest to niepotrzebne, ponieważ można uzyskać dostęp do bieżącego elementu wiersza za pomocą atrybutu h: datatable var. I często muszę przekonwertować na datamodel do listy, ponieważ niektóre biblioteki komponentów oczekują listy. Myślę o całkowitym porzuceniu DataModel. Co myślisz? Czy są jakieś zalety DataModel?JSF 2.0: Czy jest jakaś korzyść w korzystaniu z DataModel <T> na liście <T> dla aplikacji CRUD

Dzięki Theo

Odpowiedz

9

Kolejną zaletą jest to, że można uzyskać aktualnie przetwarzanego wiersza przez DataModel#getRowData(). Jest to szczególnie przydatne, gdy chcesz uzyskać dostęp do bieżącego wiersza podczas zdarzeń (konwersja/sprawdzanie poprawności, detektor zmian wartości, metoda działania itp.).

E.g.

<h:column> 
    <h:commandButton value="edit" action="#{bean.edit}" /> 
</h:column> 

z

public String edit() { 
    Item item = dataModel.getRowData(); 
    // ... 
} 

można znaleźć podstawowy przykład CRUD, który wykorzystuje to w this blog. Jeśli nie używasz DataModel, będziesz zmuszony do używania f:setPropertyActionListener dla tego, który jest tylko niezgrabny i nie będzie działać dla odbiorcy/konwertera lub słuchacza zmiany wartości. Od EL 2.2, można również przekazać aktualną var pozycję jako metoda argumentacji tak:

<h:commandButton value="edit" action="#{bean.edit(item)}" /> 

z

public String edit(Item item) { 
    // ... 
} 

Podczas ładny, to będzie tylko dokonać webapp niezgodne z Java EE 5 pojemników na bazie.

Co do narzutu, "konwersja" z List<T> na DataModel<T> jest szczególnie tania. Żadne nowe elementy nie zostały skopiowane lub utworzone, jest to po prostu klasa opakowania, która deleguje metody do zawiniętej klasy i dodaje do niej inne metody (zobacz także adapter pattern).

+2

Czy możemy wywnioskować, że 'DataModel' istnieje tylko dla dwóch funkcji: dla dostarczania informacji o wierszach (nie jest potrzebna w EL 2.2) i dla umożliwienia słuchaczom (zgadnij, że czasami może to być miłe)? Uwaga: użycie EL 2.2 nie powoduje, że aplikacja jest niekompatybilna z kontenerami JEE5 (można ręcznie aktualizować biblioteki EL), ale powoduje to, że aplikacja jest niekompatybilna ze specyfikacją JEE5. –

Powiązane problemy