Szoftverfejlesztés J2EE platformon - Labor: Java Server Faces
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
Inicializalas
- Sun Java Studio Creator 2 Update 1-et hasznalunk
- El kell inditani a Deployment es a Bundled Database servert
- New Project, name: TravelWeb, package: travel
- Jobb also sarokban lehet valasztani a projekt es a file nezetek kozott. A file nezet ugyanaz, mint NetBeansben, JSP projekt eseten
DropDownList es tablazat osszekotese
- Huzzunk ra egy DropDown controlt a palettarol a design nezetre. A Java Studio Creator general egy DropDown1DefaultOptions osztalyt. Vessuk ossze a java kodot a foliakon szereplo eletciklus modellel.
- Huzzunk egy table-t a DropDownList ala. Nezzuk meg a generalt JSP kodot.
- Huzzuk ra a Servers / Data Sources / Travel / Tables / PERSON tablat a DropDownList-re. Ilyenkor a JSF es a java kod egyszerre valtozik, erdemes egyszerre Save All-lal mindent menteni.
- dropDown1-en jobb gomb, Auto-Submit on Change menupontot ikszeljuk be. A JavaScript kodba bekerul egy OnChange esemenykezelo.
- Huzzuk ra a TRIP tablat a tablazatra.
- Outline / SessionBean1 / tripRowSet / Edit SQL Statement
- Huzzuk fel a TRIPTYPE tablat es allitsuk be, hogy milyen oszlopokat akarunk latni.
- PersonID-n Edit Query Criteria, OK
- table1-en Table Layout, selected: DEPDATE, DEPCITY, DESTCITY, NAME
- Options fulon Enable Pagination, 3 rekord/oldal
- Duplakattintas a DropDownList-en
- Illesszuk be a Samples / Travel: dropdown minta kodot a dropDown1_processValueChange esemenykezelobe es Ctrl+Shift+F-fel formazzuk meg
try { getSessionBean1().setPersonId((Integer)dropDown1.getSelected()); personDataProvider.setCursorRow(personDataProvider.findFirst("PERSON.PERSONID", dropDown1.getSelected())); getSessionBean1().getTripRowSet().setObject(1, dropDown1.getSelected()); tripDataProvider.refresh(); } catch (Exception e) { error("Cannot switch to person " + personDataProvider.getValue("PERSON.PERSONID")); log("Cannot switch to person " + personDataProvider.getValue("PERSON.PERSONID"), e); }
- A Travel: prerender kodot pedig huzzuk bele a prerender metodusba
if (getSessionBean1().getPersonId() == null ) { try { personDataProvider.cursorFirst(); getSessionBean1().getTripRowSet().setObject(1, personDataProvider.getValue("PERSON.PERSONID")); getSessionBean1().setPersonId((Integer)personDataProvider.getValue("PERSON.PERSONID")); tripDataProvider.refresh(); } catch (Exception e) { error("Cannot switch to person " + personDataProvider.getValue("PERSON.PERSONID")); log("Cannot switch to person " + personDataProvider.getValue("PERSON.PERSONID"), e); } } else { dropDown1.setSelected(getSessionBean1().getPersonId()); }
- SessionBean1 / Add / Property, name: personId, type: Integer
- Projects fulon tudunk masik temat valasztani
- Futtatas: TravelWeb projekten Run, ha nem indul el a bongeszo, nezzuk ki a logbol az url-t. localhostot cserelni kell zoneX-re
Tobb oldalas web alkalmazas
- Project / Page Navigation-on dupla kattintas
- Hozzunk letre egy Page2-t es egy Page3-at
- Page1-re rakjunk fel ket gombot: Button2 es Button3
- Page Navigation nezetben kattintsunk a Page1-re, es huzzuk ossze a gombokat Page2-vel illetve Page3-mal
- Nezzuk meg a web.xml-ben, hogy milyen navigacios szabalyok jottek letre
- Page2-nek es Page3-nak adjunk cimet (Palette / Basic / Static Text)
- A navigacios nezetet ugy tudjuk atlathatobba tenni, ha a context menuben bekattintjuk, hogy Draggable, es a Shiftet nyomva tartva atrendezzuk a grafot
- A Button2 a Page1-nek kuldi a kerest, ezert az url-ben is Page1 jelenik meg. Kezzel irt esemenykezelovel tudjuk javitani:
public String button2_action() { try { ExternalContext e = FacesContext.getCurrentInstance().getExternalContext(); e.redirect(e.encodeActionURL(e.getRequestContextPath()+"/faces/Page2.jsp")); } catch (IOException e) { throw new RuntimeException(e); } return null; }
Szamologep
Page2.java
Design
Felhuzzuk:
- Text Field, id=a, converter=new longConverter, validator=new longRangeValidator
- Outline / longRangeValidator1-ben allitsuk be a minimumot es a maximumot
- Drop Down List, id=muvelet
- Text Field, id=b, converter=longConverter1, validator=longRangeValidator1
- Button, text="="
- Static Text, id=eredmeny
Muvelet lista bekotese
private Collection ops = new ArrayList(); public Collection getOps() { return ops; } public void setOps(Collection ops) { this.ops = ops; }
Alt+Shift+F: Fix Imports
init()-ben feltoltjuk a Drop Down List-et (de a muveletek megadhatok lennenek statikusan is)
ops.add(new Option("+")); ops.add(new Option("-")); ops.add(new Option("*")); ops.add(new Option("/"));
Listan Jobb click / Bind to Data... / Page2 / ops
= gomb bekotese
Dupla kattintas rajta
public String button1_action() { // TODO: Process the button click action. Return value is a navigation // case name where null will return to the same page. String op = muvelet.getValue().toString(); long a = ((Long)this.a.getValue()).longValue(); long b = ((Long)this.b.getValue()).longValue(); if ("+".equals(op)) eredmeny.setText(""+(a+b)); else if ("-".equals(op)) eredmeny.setText(""+(a-b)); else if ("*".equals(op)) eredmeny.setText(""+(a*b)); else if ("/".equals(op)) eredmeny.setText(""+(a/b)); else eredmeny.setText("?"); return null; }
preRender() metodusban allitsuk az eredmenyt ures stringre, hogy hiba eseten ne jegyezze meg az elozo eredmenyt
Hibauzenetek
Huzzunk fel ket Message controlt, es Ctrl+Shift-et nyomva huzzuk ra a Text Fieldeket
Tobbnyelvusites
Reszletes tutorial: http://developers.sun.com/prodtech/javatools/jscreator/reference/techart/2/il8n.html\
- SessionBean1-ben kell egy locales nevu property
- Page3-ra tegyunk fel egy Drop Down Listet (id=lang) es kossuk a locales-hez
- uj elem valasztasa eseten
String l = lang.getSelected().toString(); FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(l)); getSessionBean1().setCurrentLocale(l);
- Kell egy Load Bundle control (Advanced csoport), var=m
- A Source Packages / travel / Bundle Properties / Add Locale ablakban hozzunk letre kulonbozo nyelveket
- A hu_HU es az en_US eroforras file-ban toltsuk ki a hello kulcshoz tartozo szoveget, irhatunk html kodot is
- Huzzunk fel egy Static Text controlt es a text propertyjet allitsuk #{m.hello}-ra
Onallo feladat
- Felhasznalo beleptetese
- Form, ami a TRIP tablaba felvesz uj adatokat
-- Peti - 2006.10.25.