Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615

    Semplice accesso a file properties

    Carissimi,
    sarò sintetico. La mia web app sviluppata in Java con Eclipse comprende:

    1) Un file test.properties nella cartella WEB-INF che reca solo la riga:

    alfa.beta = "big";
    2) La classe pro.java che reca il codice:

    package utility;

    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Map;
    import java.util.Properties;


    public class pro {

    public String Metodo()
    {
    Properties p = new Properties();
    String valore = "";
    try {
    p.load(this.getClass().getClassLoader().getResourc eAsStream("/WEB-INF/test.properties"));
    valore = p.getProperty("alfa.beta");
    } catch (FileNotFoundException ex) {
    ex.printStackTrace();
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    return valore;
    }
    }
    3. La pagina jsp che dovrebbe visualizzare la properties e che comprende il seguente frammento di codice.

    <%
    pro myPro = new pro();
    String myStringa = myPro.Metodo();
    out.write(myStringa);
    %>

    Ovviamente è un semplice test di lettura, non è certo il modo in cui è strutturata la mia applicazione. In questo modo vedo un messaggio di errore. Ho la sensazione (togliendo parti e rimettendole, ecc) che l'errore sia dalle parti del percorso del file properties ma posso sbagliarmi. Secondo voi perché non va? (l'errore è null.pointer.lang.exception).

    Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    myStringa risulta null o stringa vuota ?

    Edit:
    visto che si tratta di una web app e visto che il file si trova in /WEB-INF non potresti settare il path assoluto del file come attributo della richiesta o della sessione (A seconda delle esigenze) e quindi andartelo a leggere tranquillamente quando effettui il forward alla pagina jsp ?

    Oppure, se utilizzi solamente pagine jsp potresti utilizzare il metodo getContextPath() anche se temo che in tal modo di faccia accedere solo "al di fuori" della cartella WEB-INF.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Ed,
    grazie per la tua cortese risposta e per il tempo dedicato. Ho compiuto moltissime prove ed ho risolto il problema; se dovesse tornare utile a qualcuno, mi sono limitato ad inserire il file nel percorso src dell'applicazione e non per forza in una cartella creata ad hoc in altro percorso. Così funziona perfettamente.

    Ti domando una ultima cosa. Sto provando a gestire la localizzazione da codice html con il tag fmt, ti indico sotto un breve frammento di codice


    codice:
    <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
    <fmt:setBundle basename="properties.languages.message" />
    
    ...
    
    <fmt:message key="message.alert.rightaccount" />
    E così tutto funziona. Se però volessi parametrizzare l'argomento della istruzione key con un valore passato ad esempio dalla servlet che ha aperto la pagina, come di seguito ti indico (pensa alla maschera login che genera un diverso messaggio a seconda dei casi, mancanza user, mancanza password ecc), leggo un messaggio di errore. Ecco il codice incriminato:

    codice:
    <fmt:message key="${LoginMessage}" />
    Ed ecco l'errore:

    codice:
    org.apache.jasper.JasperException: /modules/session/login.jsp(17,15) According to TLD or attribute directive in tag file, attribute key does not accept any expressions
    	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
    	org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:952)
    	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:706)
    	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1442)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
    	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2216)
    	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2222)
    	org.apache.jasper.compiler.Node$Root.accept(Node.java:457)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
    	org.apache.jasper.compiler.Validator.validate(Validator.java:1484)
    	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:167)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:296)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
    	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	servletSession.ServletSessionStart.doGet(ServletSessionStart.java:40)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    
    
    note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.

    Ecco, spero di essere stato abbastanza dettagliato da poter avere un tuo aiuto. Grazie di tutto ancora e buona giornata.

    Archimede

  4. #4
    Dovresti utilizzare questo tipo di espressione:

    codice:
    <fmt:message key="<%=nomeChiave%>" />

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Per grazie per la tua risposta,
    però sto creando un'applicazione seguendo tutte le regole per una buoan stesura di codice ed ho fatto tanta fatica per "pulire" le mie pagine da ogni traccia di codice Java, lasciando solo i tags JSTL, visto che una pagina deve solo presentare dati e non codici Java. Quindi ti chiederei la cortesia di indicarmi, se puoi, un metodo nel quale utilizzare tali tags e non codice Java.

    Grazie ancora per il tempo che mi hai dedicato.

    PS cercando in rete ho visto che si può fare, solo che gli esempi trovati generano appunto l'errore che ho postato.

    Archimede

  6. #6
    Penso che il problema sia quello di settare prima la variabile attraverso jstl e poi richiamarla.
    Una cosa del genere:
    Es.
    Nel properties ho
    codice:
    titolo=Title
    e nella pagina jsp

    codice:
    <c:set var="chiave" value="titolo"/>
          
    <fmt:message key="${chiave}"/>
    che stampa: Title

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Non funziona. Dà questo errore. In generale, definire una variabile nella servlet che apre una pagina e poi richiamarla con la sintassi ${} produce lo stesso effetto del tag che mi hai indicato. Sto impazzendo, nessuno potrebbe aiutarmi? Grazie.

    codice:
    org.apache.jasper.JasperException: /modules/session/login.jsp(65,0) According to TLD or attribute directive in tag file, attribute key does not accept any expressions
    	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
    	org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:952)
    	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:706)
    	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1442)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
    	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2216)
    	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:726)
    	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1442)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
    	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2216)
    	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2222)
    	org.apache.jasper.compiler.Node$Root.accept(Node.java:457)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2166)
    	org.apache.jasper.compiler.Validator.validate(Validator.java:1484)
    	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:167)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:296)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
    	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    
    
    note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Dopo circa 7 ore di ricerche, ecco la soluzione. Nell'intestazione, modificare l'istruzione import. Era un problema di versioni, tutto qui.

    Da
    codice:
    <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
    a
    codice:
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    Grazie comunque a tutti!

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.