JSF - Progetto estrapolazione dati da mysql

di Anonimizzato20478 il
7 risposte
Il bean

package nextre.controller;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import nextre.entity.City;

@ManagedBean(name="ReportBean")
@SessionScoped
public class ReportBean implements Serializable {

	/*
	 * In JSF i bean che possono essere acceduti dalle pagine JSF sono detti managed
	 * bean. Si tratta di normalissimi bean java che possono contenere proprietà con
	 * i relativi metodi get e set, ma anche logica di business. Un managed bean può
	 * essere configurato sia utilizzando un file XML (faces-config.xml obbligatorio
	 * in JSX 1.x) ma anche attraverso le annotation.
	 */

	private static final long serialVersionUID = 1L;

	public List<City> getCity() throws ClassNotFoundException, SQLException {

		Connection connect = null;

		String url = "jdbc:mysql://localhost:3306/venere_mod";

		String username = "root";
		String password = "root";

		try {

			Class.forName("com.mysql.jdbc.Driver");
			connect = DriverManager.getConnection(url, username, password);

		} catch (SQLException ex) {
			System.out.println("in exec");
			System.out.println(ex.getMessage());
		}

		List<City> citys = new ArrayList<City>();
		PreparedStatement pstmt = connect.prepareStatement("select * from city");
		ResultSet rs = pstmt.executeQuery();

		while (rs.next()) {

			City city = new City();
			city.setId(rs.getInt("id"));
			city.setAccentCity(rs.getString("accent_city"));
			city.setCity(rs.getString("city"));
			city.setCountry(rs.getString("country"));

			citys.add(city);

		}

		rs.close();
		pstmt.close();
		connect.close();

		return citys;

	}

}

il model

package nextre.entity;

public class City {

	private int id;
	private String accentCity;
	private String city;
	private String country;

	public City(int id, String accentCity, String city, String country) {
		this.id = id;
		this.accentCity = accentCity;
		this.city = city;
		this.country = country;
	}

	public City() {}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getAccentCity() {
		return accentCity;
	}

	public void setAccentCity(String accentCity) {
		this.accentCity = accentCity;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getCountry() {
		return country;
	}

	public void setCountry(String country) {
		this.country = country;
	}

}



index.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">
<h:head>
	<title>Report City Project Venere</title>
</h:head>
<h:body>

	<h2>City Dettagli:</h2>
	
	<h:dataTable value="#{ReportBean.citys}" var="mycity" border="2">
		<h:column><f:facet name="header">Id</f:facet> #{mycity.id}</h:column>
		<h:column><f:facet name="header">accent City</f:facet> #{mycity.accentCity}</h:column>
		<h:column><f:facet name="header">city</f:facet>#{mycity.city}</h:column>
		<h:column><f:facet name="header">country</f:facet>#{mycity.country}</h:column>
	</h:dataTable>
	
</h:body>
</html>
i driver che ho scaricato nel pom sono:

<dependencies>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.6</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-api -->
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-api</artifactId>
			<version>2.2.4</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-impl -->
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-impl</artifactId>
			<version>2.2.4</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/jstl/jstl -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
		</dependency>

		<dependency>
			<groupId>com.sun.el</groupId>
			<artifactId>el-ri</artifactId>
			<version>1.0</version>
		</dependency>
		
		<dependency>
			<groupId>javax</groupId>
			<artifactId>javaee-web-api</artifactId>
			<version>6.0</version>
			<scope>provided</scope>
		</dependency>
		
	</dependencies>


Vorrei sapere come mai non mi estrapola i dati nel database??

7 Risposte

  • Value="#{ReportBean.citys}" --> mi segnala linea gialla è mi dice che il valore non l'ho trova

    citys cannot be resolved as a member of reportBean
  • robot ha scritto:


    	public List<City> getCity() throws ClassNotFoundException, SQLException {
    	<h:dataTable value="#{ReportBean.citys}" var="mycity" border="2">
    Value="#{ReportBean.citys}" --> mi segnala linea gialla è mi dice che il valore non l'ho trova
    Me ne intendo relativamente poco di JSF ma qui è facile "ragionare". C'è un metodo getCity(), quindi la property dedotta è "city", non "citys".


    (P.S. che in inglese comunque si mette al plurare con cities, non certo citys)
  • Non funziona lo stesso. sto apprendendo da poco le JSF.
    Visto che nella mia lista del metodo getCity() riferendo al Bean che mi restitusce una lista di cui nome è citys.
    Quando vado a richiamare citys non mi riconosce il bean, se provo a cambiare in city e faccio partire il progetto nella pagina non mi restituisce nessun dato.
    Hai qualche suggerimento?
  • robot ha scritto:


    Visto che nella mia lista del metodo getCity() riferendo al Bean che mi restitusce una lista di cui nome è citys.
    Quando vado a richiamare citys non mi riconosce il bean, se provo a cambiare in city e faccio partire il progetto nella pagina
    Se il metodo è getCity(), la proprietà dedotta è city . Se fosse getCities(), sarebbe cities . Queste sono le specifiche JavaBeans basilari.

    robot ha scritto:


    non mi restituisce nessun dato.
    Esegui in debugging quel metodo, vedi se esce una eccezione o che altro. Lo puoi verificare solo tu.
    Il tuo codice non è correttissimo sul fronte delle eccezioni e dei close ma come logica della query è sensato.
  • Ho provato a fare vari tentativi di debug ma nulla da fare, c'è qualcuno che conosce bene JSF?
    MI sono documentato ma nessun risultato per risolvere tale soluzione
  • robot ha scritto:


    Ho provato a fare vari tentativi di debug ma nulla da fare, c'è qualcuno che conosce bene JSF?
    MI sono documentato ma nessun risultato per risolvere tale soluzione
    Scusa ma ... 2 cose elementari:
    - quel getter (comunque l'hai chiamato, se getCity() o getCities() o che altro) VIENE chiamato quando si richiede la pagina? (dovrebbe, se il riferimento alla property è corretto)
    - se viene chiamato, quale è il flusso di esecuzione? è quanto ti aspetti?
  • Tutto risolto
Devi accedere o registrarti per scrivere nel forum
7 risposte