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.