Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Strano comportamento di un JavaBean

    Salve a tutti, c'è una cosa che non riesco a capire. Allora, ho creato una semplice pagina JSP che dichiara e usa un semplicissimo bean con una proprietà getter che recupera il valore di un elemento di un array ogni volta che la pagina viene aggiornata:

    codice:
    package beans;
    
    public class ImageBean
    {
        private static int index = -1;
        private String[] images;
        
        public ImageBean()
        {
            images = new String[3];
            images[0] = "java1.jpg";
            images[1] = "pinkfloyd.jpg";
            images[2] = "acer.jpg";
        }
        
        public String getImage()
        {        
            index++;
            
            if (index > images.length - 1)
                index = 0;
            
            return images[index];
        }
    }
    Con questo codice funziona perfettamente! Ma perchè se la variabile index invece di dichiararla "private static int" la dichiaro solamente "private int", quando poi aggiorno la pagina l'immagine non viene più aggiornata e rimane la stessa??

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Perchè c'è una serie di errori di fondo.
    Hai detto che dichiari e utilizzi questa classe all'interno di una JSP. E questo è un primo errore. I Beans e tutto ciò che fa parte della Business Logic di una web application andrebbero tenuti separati dalle pagine JSP (che implementano la Presentation Logic).

    Poi, dichiarando come "non static" una variabile all'interno della classe, essa viene legata alla singola istanza della classe: ciascuna invocazione della JSP crea una nuova istanza del bean, che, di conseguenza, inizializza a -1 la variabile index.

    Al contrario, dichiarandola static, essa non viene legata alla singola istanza del Bean, ma alla classe, quindi tutte le istanze del bean condividono la stessa variabile "index".

    Non oso immaginare quali possano essere i problemi più subdoli che si possano creare nell'utilizzare un bean non statico all'interno di una JSP...

    Consiglio spassionato: separa la business logic dalla presentation logic. Lascia alle servlet il compito di gestire i Bean, e usa le JSP solo per recuperarne i valori e visualizzarli.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Originariamente inviato da LeleFT
    Perchè c'è una serie di errori di fondo.
    Hai detto che dichiari e utilizzi questa classe all'interno di una JSP. E questo è un primo errore. I Beans e tutto ciò che fa parte della Business Logic di una web application andrebbero tenuti separati dalle pagine JSP (che implementano la Presentation Logic).

    Poi, dichiarando come "non static" una variabile all'interno della classe, essa viene legata alla singola istanza della classe: ciascuna invocazione della JSP crea una nuova istanza del bean, che, di conseguenza, inizializza a -1 la variabile index.

    Al contrario, dichiarandola static, essa non viene legata alla singola istanza del Bean, ma alla classe, quindi tutte le istanze del bean condividono la stessa variabile "index".

    Non oso immaginare quali possano essere i problemi più subdoli che si possano creare nell'utilizzare un bean non statico all'interno di una JSP...

    Consiglio spassionato: separa la business logic dalla presentation logic. Lascia alle servlet il compito di gestire i Bean, e usa le JSP solo per recuperarne i valori e visualizzarli.


    Ciao.
    Capito, in effetti se dichiaro il bean con scope "session", funziona anche se la variabile non è statica Lo so che è più sano attenersi alle regole del MVC, però sto approfondendo il campo dell'Enterprise Edition da un libro quindi sto seguendo ogni passo, grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.