kak da updatevam Vector v session

4 отговора 172 прегледа
#1

kak da updatevam Vector v session

Imam znachi edna forma koiato na Submit prashta 4 poleta do mypage.jsp. Ot mypage.jsp moga da otida pak vav formata i da napravia nov Submit no gubia dannite ot pyrvia pyt - zatova iskam niakak si da gi zapazia v container class za da moga sled N submit da napravia Update na bazata danni. Niakoi s ideia kak da stane? Dosega ne sam pravil EJBs i ako bez tiah moje da stane shte e po dobre. Blagodaria

Отговор
в отговор на butterche #2

Re: kak da updatevam Vector v session

ili triabva da resubmitvash dannite (v hidden vars, cookie, etc) ili triabva da polzvash http sessions. ne si spomenal kakav web/application server polzvash.

ako ne ti e iasno kakvo e http session - try google
po princip sesiite mogat da se poddurjat po 2 nachina - chrez session cookies ili chrez rewritevane na URL-to vseki put. v tozi smisal dori i da ne mojesh da si konfigurirash web/appl servera da polzva session cookies ne e fatalno (ili pak ako specifikaciite iziskvat da poddurjash browseri s disablenat cookie support)

za da 'vurjesh' daden obekt za http session polzvai javax.servlet.http.HttpSession.putValue(String, Object)

edno doutochnenie - tova ne slaga defakto vectora ti vav sesiyata. edinstvenoto koeto pravi e da suhrani reference kum nego vav session obekta. sessite sushtestvuvat za 1 user(browser) i za opredeleno vreme, i se razpoznavat ot kum server stranata ili po cookieto ili po sudurjanieto na url-eto.

hope this helps,
.

Отговор
в отговор на butterche #3

Re: kak da updatevam Vector v session

Съветвам те да използваш java beans. ( ne sa EJBs).

Java beans са класове, които следват някаква конвенция
1. имат публичен празен конструктор.
2. имат instance variables и за всяка променлива имат методи getXX() i setXX(..)

JSP контейнера използва reflection за да създаде и да обслужва bean-a като ти осигурява специални тагове за get i set на полетата на bean-a.

Прочети JSP спецификацията от java.sun.com. Мисля че там бяха описани.
Ако не успееш да ги намериш прати вест имам една малка лекциика за java beans, ще я изкопая от архивите.

Всеки bean си има scope (където е валиден).
1. page - only within the current JSP page and the current execution (това е като да е обявена като променива на инстанцията на JSP -то.
2. request - пази се в HTTP request-a. и може да се използва и от JSP-тата които са извикани със със същия request. например когато правиш forwarding.
3. session - пазят се в HTTP session обекта и са достъпни до всички JSP-ta за текущата сесия. Т.е. докато потребителят е активен и ползва сайта.
(Сесията се инвалидира след някакъв таймаут от сървъра така че и обекта се губи при инвалидиране на сесията)
4. application - аз лично не съм ползвала биинове с такъв scope. тези обекти са видими за всички JSP-ta.

ta...първия път когато казваш
<jsp:useBean ....> ako биина го няма, го създава и всеки следващ път използваш стария биин от който можеш да си прочетеш предишните стойности и ако искаш да ги попълниш в полетата.
Да речем в случаи когато потребителя попълва форма и едното от полетата не го е попълнил като хората... ( за да не го караш да препопълва всичко автоматично му зареждаш всички вярно попълнени полета)
Към биина можеш да сложиш и метод за валидиране на данните въведени от потребителя.

можеш в един и същ биин да въвеждаш полетата от няколко форми...
да речем да направиш попълването на данните във формата на wizard - данните да се попълват на отделни екрани. Най накрая можеш да покажеш всички попълнени данни и да попиташ потребителя дали това е всичко което иска да попълни и да го прегледа дали е вярно.

:-)
Надявам се инфото да е достатъчно
Поздрави
Вяра

Отговор
в отговор на Bepa #4

Re: kak da updatevam Vector v session

До колкото разбрах жъпроса, този код ще ти свърши работа:

java.util.Vector mySesionVector = request.getSession().getAttribute("myvector");
if (mySesionVector==null) {
mySesionVector = new java.util.Vector();
request.getSession().setAttribute("myvector",mySesionVector);
}

String formField1 = request.getParameter("field1");
String formField2 = request.getParameter("field2");
String formField3 = request.getParameter("field3");
String formField4 = request.getParameter("field4");

mySesionVector.add(new String[]{formField1,formField2,formField3,formField4});

това запълва един вектор последователно с масиви от стрингове, които съдържат данните от формата. Естествено това работи, стига да не expire-не сесията на потребителя. Когато потребителя приключи с пост-овете можеш да вземеш вектора от сесията и да правиш каквото искаш с данните вътре.

Естествено има и други начини - например да записваш всяка заявка в база от данни и накрая да обработваш накуп.

Горния код може да бъде модифициран и да се използва java bean, чийто set методи да пънят вектора и т.н.

Няма смисъл да се използват EJB-та само зарадди поставената задача.

Това е. Надявам се, да съм помогнал.

Свободата, Санчо, е ...
Отговор
в отговор на FloOoD #5

Re: kak da updatevam Vector v session

Blagodaria mnogo na vsichki. Izpolzvah metoda na FloOoD no si napravih bean sas get i set metodi za da upravliavam vseki object vav vectora.

Отговор