Szoftverfejlesztés J2EE platformon - Labor: Java Server Faces

A VIK Wikiből
A lap korábbi változatát látod, amilyen David14 (vitalap | szerkesztései) 2013. február 6., 01:19-kor történt szerkesztése után volt. (David14 átnevezte a(z) JSF labor lapot a következő névre: 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.