Da un pezzo vedo e sento le nuove leve del software (leggi colleghi giovani) che parlano di termini a me sconosciuti, alcuni intelligibili .. java, eclipse, jboss ... altri meno come jsf, jpa, jstl, ajax, ejb et similia.
Per uno che viene dalla programmazione procedurale siamo abbastanza sulla luna, ma da buon cretino
fiaccone autodidatta con l'idiosincrasia dei libri quale sono, mi son dato alla caccia di un qualche esempio per vedere di cominciare a capire di cosa si parla (io non capisco leggendo, devo vedere degli esempi fatti da cui capire le cose).
Ora data la complessità del sistema, la diversità delle realizzazioni, l'enorme numero di combinazioni delle informazioni disponibili, trovare un tutorial decente per eclipse (versione 3.5 galileo) jboss 5.1.qualcosa_d'altro.GA, jsf 1.2, ejb 3.0 senza tanti addon e plugin strani era un dramma.
Ho trovato di tutto : java6 su glsssfish con jsf 1.2, ejb2 con jsf 1.1, tomcat e openejb o ancora jboss ed eclipse e myclipse, jsf 2 ma niente ejb o tutto ejb senza la parte web, 2 kg di ejb3 ma con jsf 1.1 e la supercazzola ed anche un tizio che scambiava due fustini qualunque per uno di dixan.
Alla fine stanco mi son seduto sui due fustini per prendere fiato e mi son detto di provare a capire una cosa alla volta.
Ho ridotto le mie mire ad una micropagina jsf (1.2) su tomcat, scrivendo il tutto con eclipse.
Ho battezzato come tutorial-guida da adattare questo : http://www.eclipse.org/webtools/jsf/dev_resource/JSFTutorial-RC3/JSFTools_tutorial.html
E' in inglese, quindi spero che chi di voi sia interessato se la cavicchi un po', ed è ancora un filo incasinato ma ho ottenuto un risultato, e quello che segue sarà il come scritto man mano che avanzavo nell'impresa.
B(r)asato su : http://www.eclipse.org/webtools/jsf/dev_resource/JSFTutorial-RC3/JSFTools_tutorial.html
Installatevi tomcat su Eclipse (io ho usato la versione 6.0.quél credo vadano bene un po' tutte le ultime)
Fate un nuovo progetto "dynamic web project"
Chiamatelo come vi pare
Scegliete tomcat come target runtime e la configurazione default di tomcat
Dynamic web module version, io ho scelto 2.5, non so ne cosa sia ne a cosa serva.
Source folders, ho lasciato src, se volete che i vostri files risiedano altrove, seceglete un path diverso, trik e trak
Poi avanti con tutto standard e create il progetto.
Andate nelle properties del progetto
Aprite Project Facets (ma non chiedetevi che vuol dire)
Selezionate Java Server Faces e nel tab che si apre a dx pigiate download library, io ho preso quelle della SUN.
(P.S. in un secondo tempo, dopo aver creato le librerie JSTL, che vedrete dopo i vari passi successivi se mi ricordo di scriverlo, le ho ritrovate anche qua, quindi forse posso dirgli di prendersele dietro da qui senza dover copiare il jar nella cartella WEB-INF/lib come ho fatto .. boh, saltate questa parentesi che non la capisco nemmeno io)
Cmq scaricate le librerie jsf, create ste librerie e tornate al progetto ed alla pagina guida del brasato
dovete creare le jsp, le boiate le lascio alla pagina web (che vi fa vedere che eclipse vi segnala gli errorini, e come configurare le varie cosette), copio solo i miei files :
>> login.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<f:view>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login</title>
<f:loadBundle basename="org.tutorial.messages" var="msg"/>
</head>
<body>
<h:form>
<h:messages layout="table"></h:messages>
<h:panelGrid columns="2">
<h:outputLabel rendered="true" value="#{msg.name}"></h:outputLabel>
<h:inputText value="#{loginBean.name}"></h:inputText>
<h:outputLabel rendered="true" value="#{msg.password}"></h:outputLabel>
<h:inputSecret value="#{loginBean.password.convertID}">
<f:converter converterId="javax.faces.Long"></f:converter >
<f:validator validatorId="org.tutorial.validatePassword"></f:validator>
</h:inputSecret>
</h:panelGrid>
<h:commandButton action="login" value="#{msg.login}"></h:commandButton>
</h:form>
</body>
</f:view>
</html>
<< login.jsp
>> welcome.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<f:view>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome</title>
<f:loadBundle basename="org.tutorial.messages" var="msg"/>
</head>
<body>
<h:form>
<h:outputLabel value="#{msg.welcome} #{loginBean.name}"></h:outputLabel>
</h:form>
</body>
</f:view>
</html>
<< welcome.jsp
>> LoginBean.java
package org.tutorial;
public class LoginBean {
private String name;
private ComplexPassword password;
public LoginBean() {
super();
password = new ComplexPassword();
}
public ComplexPassword getPassword() { return password; }
public void setComplexPassword(ComplexPassword value) {
password = value;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public static class ComplexPassword {
private String inputText;
private long convertID;
public void setInputText(String inputText) {
this.inputText = inputText;
}
public String getInputText() {
return inputText;
}
public void setConvertID(long convertID) {
this.convertID = convertID;
}
public long getConvertID() {
return convertID;
}
}
}
<< LoginBean.java
>> validatePassword.java
package org.tutorial;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
public class validatePassword implements Validator {
public void validate(FacesContext arg0, UIComponent arg1, Object arg2)
throws ValidatorException {
// TODO Auto-generated method stub
}
}
<< validatePassword.java
>> messages.properties
name=Name
password=Password
login=Login
welcome=Welcome
<< messages.properties
N.B. da notare che i miei packages erano org.tutorial e non com.tutorial come nel b(r)asato originale.
Ora a questo punto, e dopo aver lavorato con faces.config.xml come riportato nel b(r)asato, il mio progetto non andava per 2 motivi :
a] Il percorso non è http://localhost:8080/nomeDelTuoProgetto/login.jsp MA http://localhost:8080/nomeDelTuoProgetto/faces/login.jsp (c'è quel faces deppiù)
b] Anche se punti al punto giusto tomCat ti dice : java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
Iin pratica pare non trovi una classe delle jstl .. ma certo .. chi gli ha mai messo le jstl ?
ERGO :
1] Ottieni le jstl (che manco so cosa siano per bene, io ho trovato un jstl.jar sotto jboss 5.1)
2] Scopiazzatele da qualche parte (io le ho messe in : mioWorkSpaceDiEclipse/libraries/JSTL/)
3] Fanne una libreria per il tuo progetto
3.a] Apri window/preferences (la prima cosa da fare se usi eclipse è andare sul menu window, anche se vuoi un caffè pare funzioni)
3.b] Apri Java->Build Path->User Libraries
3.c] New (e mettici nome JSTL e dai ok)
3.d] Add Jars, localizza jstl.jar ed aggiungilo
3.e] Aroperty del tuo progetto, ProjectFacets->Java Server Faces
3.f] Aggiungi JST, compila e prova a vedere se va
Se va sei fortunato, io non ho fatto i punti 3.e e 3.f ma li ho scritti perchè reputo siano funzionanti.
Se non fai quei due punti, non va di sicuro perchè dopo il deploy sul tomcat non trova le jstl.
La mia soluzione (che funziona ma è meno elegante) è stata quella di copiare il jstl.jar nella cartella WEB-INF/lib del mio progetto.
Runna (bleah, che termini italianizzati), apri
http://localhost:8080/nomeDelTuoProgetto/faces/login.jsp
Mmetti una username a piacimento, ed una password numerica (non chiedere perchè la pass numerica, indaga TU !)
Et voià !
(spero per te funzioni, se così non fosse e se riesci ad arrivarci in fondo, aspettiamo un tuo commento e correzioni a riguardo !)
Ti devo dire che da me non funge. Nessun'eccezione nella console, ma all'indirizzo http://localhost:8080/JSF/faces/login.jsp appare un HTTP Status 404, The requested resource (/JSF/faces/login.jsp) is not available. Camelia.
RispondiElimina