Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    456

    problema con cache delle variabili o roba simile

    Ciao,
    ho una pagina che invia dati a se stessa dopo che alcune variabili sono state gestite tramite un bean.
    Mi succede una cosa strana.
    Quando stampo a video una di queste variabili, il testo si somma a quello che la variabile conteneva, prima del nuovo post della pagina.
    Vi faccio un esempio pratico, invece di stampare:

    1° invio della pagina:
    ciao

    2° invio della pagina
    arriverderci

    2° invio della pagina
    buonanotte.

    stampa questo:

    1° invio della pagina:
    ciao

    2° invio della pagina
    ciao arriverderci

    2° invio della pagina
    ciao arriverderci buonanotte.


    Grazie

  2. #2
    Non è che per caso il bean in questione lo hai dichiarato in session scope o la "variabile" a cui assegni tale valore è dichiarata come static ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    456
    La variabile è static e sta dentro un metodo static, visto che il bean che contiene quel metodo, viene richiamato, non da una pagina jsp, ma da un altro bean.
    Secondo quanto mi hanno spiegato altri utenti del forum, per 'caricare' un metodo di un bean, 'partendo' da un altro bean (e non da una pagina jsp) , il metodo in questione e le relative variabili devono essere static.
    Come posso risolvere il problema?
    Grazie.

  4. #4
    Originariamente inviato da matpirata
    La variabile è static e sta dentro un metodo static, visto che il bean che contiene quel metodo, viene richiamato, non da una pagina jsp, ma da un altro bean.
    Secondo quanto mi hanno spiegato altri utenti del forum, per 'caricare' un metodo di un bean, 'partendo' da un altro bean (e non da una pagina jsp) , il metodo in questione e le relative variabili devono essere static.
    Come posso risolvere il problema?
    Grazie.
    Non mi è chiara la cosa, e sono dell'avviso che in un ambiente web le variabile statiche non andrebbero mai usate (troppo pericolose)
    cmq,
    come gestisci il "caricamento" devi gestire anche lo "scaricamento" / "annulamento" della variabile in questione.
    Ovviamente ragionando sull'aria fritta è difficile risponderti....

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    456
    Partiamo dal presupposto che non sto lavorando su un vero e proprio progetto, sto solo studiando jsp da qualche mese (nel poco tempo libero), e quindi sto cercando di capire il funzionamento dei bean.

    Una cosa che mi interessava sapere era se posso richiamare da un bean A, un metodo che sta in un bean B, dal quale poi magari richiamare un metodo che sta in un bean C e così via.

    Non c'è una motivo specifico per il quale sto facendo questa cosa, sto solo studiando qualcosa , alivello logico, che poi magari mi servirà un domani sul lavoro.

    Un altro utente mi ha aiutato in un thread precedente, e mi ha spiegato che se utilizzo un metodo statico questo è possibile. Però, con un metodo statico nasce il problema che ho spiegato sopra.

    Se vuoi posso postare il codice, anche se forse è inutile visto che, ripeto, sto solo studiando i vari modi di accedere ai metodi nei bean.

  6. #6
    Il concetto quindi è l'uso dei bean...
    Allora come ben saprai essi hanno uno scopo (scope) session,request,application e serve a gestire il ciclo di vita.
    Un bean dichiarato request verrà creato (e forse distrutto GC permettendo) ad ogni richiesta che farai a quest'ultimo quindi se per esempio da una pagina jsp richiami un metodo di un bean setNome(String nome); quando andrai a reinvocare il metodo effettuando di nuovo la richiesta esso non ha memoria della precedente chiamata.
    Un session bean o un application bean invece sono legati, il primo al concetto di sessione web e il secondo al ciclo di vita dell'applicazione; in particolare se il bean in questione è stato dichiarato come session bean esso verrà creato alla prima invocazione fatta è verrà posto nella mappa di sessione da cui poi sarà recuperato per tutte le successive chiamate finchè la sessione avrà vita.
    Premesso questo, e sicuramente non ho detto tutto, entrando nel problema specifico non capisco perchè devi usare un metodo statico. Faccio un esempio
    codice:
    public class BeanC
    {
       public void metodoC()
       {
          //fai qualcosa
       }
    }
    public class BeanB
    {
       public void metodoB()
       {
          //fai qualcosa
       }
    }
    public class BeanA
    {
       public void metodoA()
       {
          //fai qualcosa
       }
    }
    pagina jsp
    <jsp:useBean id="beanA" scope="request" class="package.name.BeanA"/>
    .....
    beanA.metodoA();
    A quanto ho capito quello che vuoi fare è dal metodoA richiamare il metodoB del BeanB e il metodoC del BeanC se è cosi basta implementare il metodoA come segue:
    codice:
     public void metodoA()
       {
          BeanB beanB = new BeanB();
          beanB.metodoB();
          BeanC beanC = new BeanC();
          beanC.metodoC();
    
       }
    e il gioco è fatto.
    Questo ovviamente se non hai bisogno di gestire i bean in sessione.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    456
    Hai capito perfettamente quello che mi serviva.
    Funziona perfettamente.

    Ti disturbo con un altra cosa già che ci sono.

    Ho intenzione di passare dalla pagina jsp una variabile String al metodoA.
    Diciamo, per esempio, che il metodoA, mette la stringa in maiuscolo, il metodoB, gli aggiunge un numero, ed il metodoC gli aggiunge un altro carattere.

    Ho varie stringhe da passare al primo bean (che poi le passa agli altri); è corretto caricare il metodoA con beanA.metodoA(); per ognuna della stringhe? Mi ritrovo un codice di questo tipo

    codice:
    <%
    beanA.metodoA(stringa 1); 
    //codice bla bla bla
    
    beanA.metodoA(stringa 2); 
    //codice bla bla bla
    
    beanA.metodoA(stringa 3); 
    //codice bla bla bla
     %>

    E' 'pulita' una cosa del genre? O magari dopo ogni 'apertura' il metodoA va chiuso, o va trattato in qualche altro modo specifico?
    Grazie mille

  8. #8
    Non capisco cosa intendi per chiusura (deallocazione.... se si te lo puoi sognare in java);
    cmq il codice postato è abbastanza pulito. Il dubbio che mi viene e se hai bisogno veramente che sia il metodo A a dover richiamare gli altri metodi. Sappi che in un pagina JSP puoi avere "n" bean.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    456
    Si si, lo so che ci pososno essere n bean.

    Non lo so se in realtà avrò bisogno di chiamare altri metodi dal metodoA.
    Studiando mi sono posto questa domanda e cercavo una soluzione.

    Ho immaginato di dover fare un form con il controllo sulla correttezza dei dati inseriti nei campi.
    Immaginiamo che la password oggi debba comprendere sia lettere che numeri.

    Io creo un bean che controlla le lettere, ed un bean che controlla i numeri.
    Poi richiamo questi bean con un bean principale (che chiamerò ad esempio beanPassword), che viene richiamato a sua volta nella jsp.

    In questo modo, un domani, quando la password dovrà comprendere anche caratteri speciali,
    potrò modificare il beanA, senza dire a chi cura l'html, di dover istanziare un altro bean che controlla i caratteri speciali.

    Quindi, nella pagina jsp avrò sempre il beanPassword, che però è stato opportunamente modificato.

    Pensando ad un problema di questo tipo sono arrivato a questa soluzione logica, ma non è dett che sia la più corretta.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.