Seweryn Bidołach

Seweryn Bidołach Project Manager

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Mam dość zaawansowany formularz który składa się z około 200 inputów na stronie jsp. Przy wykonaniu sumbit na formularza wszystkie dane są wysyłane do Servlet'a. Servlet natomiast pobiera wszystkie dane z requesta i ustawia je w modelach hibernate, a nastepnie za pomocą DAO wykonuje zapisanie do bazy danych.

Przykładowy kod w jsp:

<form>
<table style="margin-left: -10px;">
<tr>
<td><input type="checkbox" name="pd_zpp_radio" <%= zw.isPdZppRadio()?"CHECKED":"" %> /></td>
<td style="vertical-align: middle;">radio</td>
</tr>
<tr>
<td><input type="checkbox" name="pd_zpp_tel" <%= zw.isPdZppTel()?"CHECKED":"" %> /></td>
<td style="vertical-align: middle;">tel.</td>
</tr>
<tr>
<td><input type="checkbox" name="pd_zpp_inf" <%= zw.isPdZppInf()?"CHECKED":"" %>/></td>
<td style="vertical-align: middle;">inform.</td>
</tr>
</table>
</form>

Kod po stronie Servleta:

String pd_zpp_radio = req.getParameter("pd_zpp_radio");
String pd_zpp_tel = req.getParameter("pd_zpp_tel");
String pd_zpp_inf = req.getParameter("pd_zpp_inf");
...
ZlecenieWyjazdu zw = new ZlecenieWyjazdu();
...
zw.setPdZppInf(Util.isChecked(pd_zpp_inf));
zw.setPdZppRadio(Util.isChecked(pd_zpp_radio));
zw.setPdZppTel(Util.isChecked(pd_zpp_tel));
...
dao.saveZlecenieWyjazdu(zw);


Zna ktoś jakaś technologie, metodę, framework żeby w prosty sposób utworzyć obiekty z modeli hibernate bez pobierania każdej wartości z requesta osobno i uzupełniania jej w modelu?Seweryn Bidołach edytował(a) ten post dnia 26.05.11 o godzinie 15:44

konto usunięte

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Hm, moze po prostu cokolwiek innego niz plain jsp?
Chyba juz kazdy framework webowy obsluguje takie operacje ...

PS: ten Senior Software Developer to w ktorym jezyku?
Adrian C.

Adrian C.
projektant/programis
ta

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Łukasz Grabski:
.....
PS: ten Senior Software Developer to w ktorym jezyku?

Zazdrość! ;)
Piotr T.

Piotr T. Spring/Microservices

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Pytania nie zrozumiałem więc odniosę się tylko do tematu.
Z akcyjnych wystarczy Spring MVC+ JSP
podpinasz kontroler
definujesz że komendą dla kontrolera będzie obiekt który zamierzasz zapisywać do bazy.
http://static.springsource.org/spring/docs/2.0.x/refer...
Seweryn Bidołach

Seweryn Bidołach Project Manager

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Problem jest tego typu że rozwiązanie jest zrobione jako plugin do RCP używając equinoxa z wbudowanym serwerem Jetty. Niestety w wersji eclipsa 3.4 jetty nie obsługuje ani filtrów ani listenerów stad powstała koncepcja zbudowania tego na JSP + Servlet + Hibenrate. Wiec jeśli ktoś ma pomysł jak z tych elementów coś takiego zrobić to będę wdzięczny.

Rozważam też użycie bridge dla equinoxa żeby podpiąć pełny serwer ale przyznam szczerze że czas nas trochę goni na eksperymenty.Seweryn Bidołach edytował(a) ten post dnia 26.05.11 o godzinie 17:25
Tomasz Radwański

Tomasz Radwański Java \ JEE developer

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Najprościej użyć dowolnego frameworka mvc, np. Spring MVC:

http://maestric.com/doc/java/spring

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

A JSF i komponenty zarządzane?
(tak, to jest pytanie (rookie-go), kto nie wie i zapyta wstydzi się raz; kto nie wie i nie zapyta wstydzi się całe życie ;) )

/E: Oczywiście pomijając konieczność przepisywania widoków (zakładam, że mamy specyfikację projektu przed nosem i musimy się zdecydować na którś z rozwiązań)Marcin Kubala edytował(a) ten post dnia 26.05.11 o godzinie 21:28
Marcin Kapusta

Marcin Kapusta iOS
Developer/Software
Developer/Music
Producer

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Tomasz Radwański:
Najprościej użyć dowolnego frameworka mvc, np. Spring MVC:

http://maestric.com/doc/java/spring

Jak podepniesz Spring MVC pod server Jetty działający pod equinoxem jako plugin RCP, który jest częścią uruchomionego Eclipsa to stawiam Ci browar.

Z doświadczenia wiem, że grzebiąc w web.xml nic nie da, ani podpinanie filtrów, ani innych listenerów gdyż to rozwiązanie nie ma się jak do standardów J2EE. Ja raczej bym kierował się w stronę jakiejś biblioteki w postaci HELPERA dla servletów czy coś takiego. Nie wiem jednak jak wszystkie elementy wysłane POSTEM (a jest ich pewnie ogromna ilość z takiego formularza) zmapować na obiekt, który później Hibernate utrwali w bazie (dodać jeszcze do tego sprawdzenie czy wszystkie pola są poprawnie wypełnione). Może ktoś zna bibliotekę, która pomoże w takim przechwyceniu parametrów wysłanych POSTEM.

--
Pozdr...

konto usunięte

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

A moze by uruchamiac jetty w trybie embedded?
Mam na mysli napisanie wlasnego komponentu osgi (czy jak sie to nazywa w tej nomenklaturze).
Mozesz wtedy recznie dodac serwlety do jettowiego kontenera servletow poprzez ServletHolder lub FilterHolder.Łukasz Grabski edytował(a) ten post dnia 27.05.11 o godzinie 12:37
Tomasz Radwański

Tomasz Radwański Java \ JEE developer

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

A kopiowanie pól przez refleksję? Proste mapowania nie powinny być problemem. Można by je też parametryzować np. przez annotacje.
Tomasz Radwański

Tomasz Radwański Java \ JEE developer

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

CD..

Potrzebujesz mappera (buildera obiektów) który:
- utworzy obiekt danej klasy;
- przekopiuje wartości z mapy (request) do propertiesów (refleksja + ew. annotacje);
- będzie się musiał bawić z typami danych (konwersja Stringa do typu docelowego), też niewielki problem.

Do tego walidator, bazujący np. na Bean Validator (Hibernate Validator, JSR303), który w prosty sposób przeprowadzi walidację.
Piotr T.

Piotr T. Spring/Microservices

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Marcin Kapusta:
Tomasz Radwański:
Najprościej użyć dowolnego frameworka mvc, np. Spring MVC:

http://maestric.com/doc/java/spring

Jak podepniesz Spring MVC pod server Jetty działający pod equinoxem jako plugin RCP, który jest częścią uruchomionego Eclipsa to stawiam Ci browar.

Z doświadczenia wiem, że grzebiąc w web.xml nic nie da, ani podpinanie filtrów, ani innych listenerów gdyż to rozwiązanie
Wystarczy servlet, DispatcherServlet ;)

<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>

</web-app>
Seweryn Bidołach

Seweryn Bidołach Project Manager

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Udało się jednak podpiąć springa pod jetty wbudowanego w equinoxa. W tym celu trzeba zrobić odpowiedniego extensiona gdyż plik web.xml nie interpretuje servletów, filtrów i listenerów.

Poniżej podaje jak taki extension powinien wyglądać:


<extension point="org.eclipse.equinox.http.registry.servlets">
<servlet
alias="/*.do"
class="org.springframework.web.servlet.DispatcherServlet"
load-on-startup="false">
<init-param
name="contextConfigLocation"
value="/web/jsp/WEB-INF/dispatcher-servlet.xml">
</init-param>
</servlet>
<servlet
alias="/*.jsp"
class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/web/jsp"
load-on-startup="false">
</servlet>
</extension>


Teraz wszystko działa tak jak powinno, a całą konfigurację hibernate przeniosłem do dispatcher-servlet.xml.

Ktoś wcześniej pisał o jakimś browarze, wiec zgodnie z obietnicą czekam na zimnego LECHA :)Seweryn Bidołach edytował(a) ten post dnia 31.05.11 o godzinie 11:43
Marcin Kapusta

Marcin Kapusta iOS
Developer/Software
Developer/Music
Producer

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Seweryn Bidołach:
Ktoś wcześniej pisał o jakimś browarze, wiec zgodnie z obietnicą czekam na zimnego LECHA :)

Zapraszam w związku z powyższym na bardzo zimnego Leszka tutaj: http://apps.facebook.com/skocz_na_piwko/ :)Marcin Kapusta edytował(a) ten post dnia 31.05.11 o godzinie 12:10

konto usunięte

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Zna ktoś jakaś technologie, metodę, framework żeby w prosty sposób utworzyć obiekty z modeli hibernate bez pobierania każdej wartości z requesta osobno i uzupełniania jej w modelu?

W ogólnym przypadku - sztuczna inteligencja.
Innym sposobem jest nadanie tych samych nazw kolumnom w tabeli i polom w formularzu.
Seweryn Bidołach

Seweryn Bidołach Project Manager

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Jakub Wojt:

W ogólnym przypadku - sztuczna inteligencja.
Innym sposobem jest nadanie tych samych nazw kolumnom w tabeli i polom w formularzu.

Temat już jest zamknięty, problem rozwiązałem za pomocą Springa + Hibenrate.
Nie rozumiem jednak w jaki sposób chcesz zmapować wszystkie dane z formularza do złożonego obiektu hibernate? Najlepiej to zobrazować na przykładzie, wiec jak możesz to podaj jakiś taki przykład.
Tomasz Szymański

Tomasz Szymański Lead Java Developer,
Bravura Solutions

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Jakub Wojt:
Innym sposobem jest nadanie tych samych nazw kolumnom w tabeli i polom w formularzu.

Dokładniej mówiąc - nie koniecznie kolumnom w tabeli, ale atrybutom w obiekcie.
Seweryn, jeśli stosowałbyś się do powyższej zasady (czyli np. jeśli klasa Person ma firstName i lastName oraz ma obiekt Dog, który ma name, to pola w formularzu nazywałbyś np. person.firstName, person.lastName, person.dog.name), no to nie jest to raczej zadanie z tych najtrudniejszych - tak jak pisali koledzy: refleksja.
O ile zresztą wiem, Spring, którego użyłeś, tak to właśnie mniej więcej robi, nie? Oprócz tego pozwala przez swoją bibliotekę tagów zrobić coś odwrotnego - wyświetlić formularz wypełniony danymi obiektu.

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

(czyli np. jeśli klasa Person ma firstName i lastName oraz ma obiekt Dog, który ma name, to pola w formularzu nazywałbyś np. person.firstName, person.lastName, person.dog.name), no to nie jest to raczej zadanie z tych najtrudniejszych - tak jak pisali koledzy: refleksja.
Ale i tak pozostaje problem konwersji i walidacji. Tutaj może z pomocą przyjść jakaś implementacja JSR-303, np. Hibernate Validator.. oraz jakiś przesiew identyfikatorów pól formularza pod kątem dozwolonych nazw obiektów.

Postawienie wyłącznie na tego typu konwencję nazw i refleksję,
to punkt wyjścia do nadużyć (złośliwy użytkownik może wysyłać sfabrykowane formularze, modyfikując właściwości obiektów, do których nie powinien mieć dostępu).Marcin Kubala edytował(a) ten post dnia 02.06.11 o godzinie 02:33
Piotr T.

Piotr T. Spring/Microservices

Temat: Zapisywanie zaawansowanych formularzy w jsp do bazy danych

Marcin Kubala:
>...

Postawienie wyłącznie na tego typu konwencję nazw i refleksję,
http://maestric.com/doc/java/spring/form_validation :)

Następna dyskusja:

Problem z optimistic lockin...




Wyślij zaproszenie do