Szoftverfejlesztés J2EE platformon - Labor: Java Server Faces
A VIK Wikiből
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.