PDA

View Full Version : [JAVA & JSP] Qualche info basilare


dooka
07-09-2007, 13:39
Premetto che ho tutto funzionante (eclipse, callisto, struts, hibernate, etc), solo che devo raccapezzarmi un attimo

ho un progetto con già il sistema di login funzionante (si appoggia ad un database hibernate), ora vorrei che nella pagina di welcome, ci fosse un link che mi porta ad una pagina giocatori.jsp con tutto l'elenco della tabella tb_utenti

la classe java chiamata dal link è ListaGiocatori.java e la pagina si chiama giocatori.jsp

nel mapping di struts va tutto bene (se clicco sul link mi porta alla pagina giocatori.jsp) ma noto che la classe java non esegue praticamente nessuna parte di codice... qualcuno mi puo scrivere una classe generica di riferimento? una classe che esegua 2 istruzioni banali

grazie

PGI-Bis
07-09-2007, 14:18
Adesso fraintendo:

package test;

public class Esempio {
private String stringa = "ciao";

public void cambiaStringa() {
stringa = "mondo";
}

public String getStringa() {
return stringa;
}
}

Fa due cose, banali. E' questo che intendevi?

dooka
07-09-2007, 15:41
non proprio :)

ho un mapping di questo tipo:

http://i15.tinypic.com/35ch5q9.png

la classe ListaGiocatori.java esegue una query su un database HSQL, restituendo una lista di utenti

ora vorrei passare pari pari l'arraylist creato alla pagina .jsp in modo da poterla scorrere con il c:forEach (o altri metodi se ce ne dovessero essere)

PGI-Bis
07-09-2007, 16:19
Lo sospettato ma, sai, uno non è mai certo finchè non si sbilancia.

Hai provato a passare la lista come attributo di sessione?

dooka
07-09-2007, 16:30
Lo sospettato ma, sai, uno non è mai certo finchè non si sbilancia.

Hai provato a passare la lista come attributo di sessione?

premetto che sto iniziando solo "ora" a capire come macina sto coso...

ublic class ListaGiocatori extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
Session session = HibernateHelper.getInstance().getSession();
Transaction transaction = null;
ArrayList listaGiocatori = null;
Object ob;
try {

transaction = session.getTransaction();
transaction.begin();
ob = session.createQuery("from data.Utente");
/*listaGiocatori = (ArrayList)ob;
for(int i=0; i<listaGiocatori.size(); i++)
System.out.println(listaGiocatori.get(i).toString());*/
transaction.commit();
} catch(HibernateException e) {
transaction.rollback();
throw e;
} finally {
//session.close();
}
session.save(ob);
return mapping.findForward("forward1");

}
}

quindi, session, transaction non mi sono ancora molto chiari... lapidatemi pure, ma come dovrei fare x passare il risultato di quella semplice query? :stordita:

PGI-Bis
07-09-2007, 17:30
Per sessione intendevo la sessione della servlet. Realizzo tuttavia solo ora che stai usando struts. Ho il privilegio di non aver mai avuto a che fare con quell'immondizia. Aspettiamo e vediamo se qualcuno più sfortunato può risolvere il dubbio.

dooka
07-09-2007, 17:49
è sempre bello sapere che i primi approcci sono quelli che utilizzano sempre le cose peggiori :doh:

x il passaggio dell'oggetto dalla java alla jsp ho risolto

HttpSession session1 = request.getSession();

listaUtentiDaQuery = session.createQuery("from data.Utente").list();

for(int i=0; i<listaUtentiDaQuery.size(); i++){
System.out.println(listaUtentiDaQuery.get(i).toString());
utente = (Utente)listaUtentiDaQuery.get(i);
listaGiocatori.add(utente);
}

session1.setAttribute("listaGiocatori", listaGiocatori);

infatti da jsp con:

<c:forEach var="item" items="${listaGiocatori}" varStatus="status">
<p><c:out value="${listaGiocatori}"></c:out></p>
</c:forEach>

mi visualizza TUTTI i risultati x il numero di entry che ci sono nel db

se provo a fare listaGiocatori.id mi dice che il "." non è un operatore supportato etc etc...

PGI-Bis
07-09-2007, 18:04
Struts è usatissimo per lo sviluppo di applicazioni web Java. Se vuoi lavorare in una software house che sviluppa applicazioni web J2EE struts devi conoscerlo. Fa schifo perchè...diavolo, si vede che fa schifo. E' un catafalco ributtante che ti costringe a scrivere cinque volte più codice del buon vecchio Java. Ma si usa.

Hibernate non è messo meglio. Se per il piacere di scrivere @Entity poi devo ammazzarmi di XML tanto vale che butti tutto nel cesso e mi scriva un dao.

Comunque, a parte queste mie feroci opinioni personali, il ".": sicuro di non dover usare "item" in quel foeach? Teoricamente il foreach fa una scansione di listaGiocatori e per ogni passaggio piazza il risultato in item.

dooka
07-09-2007, 18:22
premesso che non avevo "collegato mentalmente" che il termine var, fosse il tipo di classe a cui forzava la lettura x ogni ciclo

ho cosi cambiato in var="Utente" e ora funziona tutto :)

ti ringrazio degli aiuti, e probabilmente finche non finirò il progetto, continuerò a usare questo 3d x cose che generalmente saranno banali :stordita:

dooka
07-09-2007, 22:40
altro quesito:

da una pagina JSP ho un link costruito dinamicamente che è piu o meno: Classe.do?id=1

dove Classe.java è la classe che dovrebbe prendere l'id 1 passato da url, fare la ricerca sul DataBase ed estrarre il record relativo

ora, come si scrive la classe Classe.java in modo che legga il parametro id passato da url?

PGI-Bis
07-09-2007, 22:46
Quei valori arrivano come attributi della richiesta (HttpRequest). Dovresti riuscire a recuperarli per nome, una cosa tipo:

request.getAttribute(nome);

dooka
08-09-2007, 13:45
Quei valori arrivano come attributi della richiesta (HttpRequest). Dovresti riuscire a recuperarli per nome, una cosa tipo:

request.getAttribute(nome);

è quello che pensavo io

la classe processa cosi:

System.out.println((String)request.getAttribute("ID"));

e il link a cui si arriva è: GestioneIscritti.do?ID=1

edit: era request.getParameters ;)

ma la stampa porta a null quindi non legge il parametro

dooka
08-09-2007, 16:23
hibernate mi sta iniziando a far ribrezzo...

dovrei joinare una tabella AssorbimentoProdotto che contiene nel campo Prodotto l'id del prodotto relativo, con la tabella Prodotto e il relativo campo id

in sql:

select * from AssorbimentoProdotto a , Prodotto p
where a.prodotto = p.id

in hibernate come cavolo si scrive che qua mi sta esplodendo tutto

PGI-Bis
08-09-2007, 18:40
Premetto che con createSQLQuery puoi fare una query in SQL "normale".

In HQL io vedo questo esempio qui:

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?")
.setString(0, name)
.list();

Ti suggerisce qualcosa? Se no ne ho altri :D.

dooka
08-09-2007, 18:52
Premetto che con createSQLQuery puoi fare una query in SQL "normale".

In HQL io vedo questo esempio qui:

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?")
.setString(0, name)
.list();

Ti suggerisce qualcosa? Se no ne ho altri :D.

uha hai googlato pure te? :asd:

ho lo stesso esempio qua su un txt :asd:

cmq piano piano sto realizzando qual'è il problema:

sto lavorando su un database hsql che viene creato, istanziato e riempito da sorgente java. Tutto è stato fatto dal mio docente di corso, il problema che si pone è che non c'è un riscontro univoco (1:1) tra classe java e tabella hsql

la classe MacroArea.java contiene al suo interno un Set di oggetti di tipo AssorbimentoProdotto.java

AssorbimentoProdotto.java ha come variabile l'oggetto Prodotto.java

in HSQL non ci sono le 3 tabelle, ma le 2 (macroarea e prodotto) + quella delle foreign key

il mio scopo è: avere le informazioni, per ogni MacroArea, dei vari assorbimentiProdotti e relativo nome del prodotto (che è contenuto SOLO nella classe Prodotto.java)