【发布时间】:2015-03-18 08:50:45
【问题描述】:
我遇到了一种方法,可以在网站上显示我的数据库中的数据。但是,我遵循了一个示例,即创建一个 bean,在我要显示的页面上创建一个数据表,但是当我运行网站时,它只打印出 bean 的字符串。我该如何纠正这个问题?
index.xhtml
<h:dataTable value="#{addressBean.addresses}" var="address" rowClasses="oddRows,evenRows" headerClass="header" styleClass="table" cellpadding="5" cellspacing="0">
<h:column>
<f:facet name="header">First Name</f:facet>
#{address.FIRSTNAME}
</h:column>
<h:column>
<f:facet name="header">Last Name</f:facet>
#{address.LASTNAME}
</h:column>
<h:column>
<f:facet name="header">Street</f:facet>
#{address.STREET}
</h:column>
<h:column>
<f:facet name="header">City</f:facet>
#{address.CITY}
</h:column>
<h:column>
<f:facet name="header">State</f:facet>
#{address.STATE}
</h:column>
<h:column>
<f:facet name="header">Zip code</f:facet>
#{address.ZIP}
</h:column>
</h:dataTable>
AddressBean.java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.sql.DataSource;
import javax.sql.rowset.CachedRowSet;
@
ManagedBean(name = "addressBean")
public class AddressBean {
// instance variables that represent one address
private String firstName;
private String lastName;
private String street;
private String city;
private String state;
private String zipcode;
// allow the server to inject the DataSource
@
Resource(name = "jdbc/addressbook")
DataSource dataSource;
// get the first name
public String getFirstName() {
return firstName;
} // end method getFirstName
// set the first name
public void setFirstName(String firstName) {
this.firstName = firstName;
} // end method setFirstName
// get the last name
public String getLastName() {
return lastName;
} // end method getLastName
// set the last name
public void setLastName(String lastName) {
this.lastName = lastName;
} // end method setLastName
// get the street
public String getStreet() {
return street;
} // end method getStreet
// set the street
public void setStreet(String street) {
this.street = street;
} // end method setStreet
// get the city
public String getCity() {
return city;
} // end method getCity
// set the city
public void setCity(String city) {
this.city = city;
} // end method setCity
// get the state
public String getState() {
return state;
} // end method getState
// set the state
public void setState(String state) {
this.state = state;
} // end method setState
// get the zipcode
public String getZipcode() {
return zipcode;
} // end method getZipcode
// set the zipcode
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
} // end method setZipcode
// save a new address book entry
public String save() throws SQLException {
// check whether dataSource was injected by the server
if (dataSource == null)
throw new SQLException("Unable to obtain DataSource");
// obtain a connection from the connection pool
Connection connection = dataSource.getConnection();
// check whether connection was successful
if (connection == null)
throw new SQLException("Unable to connect to DataSource");
try {
// create a PreparedStatement to insert a new address book entry
PreparedStatement addEntry =
connection.prepareStatement("INSERT INTO ADDRESSES " +
"(FIRSTNAME,LASTNAME,STREET,CITY,STATE,ZIP)" +
"VALUES ( ?, ?, ?, ?, ?, ? )");
// specify the PreparedStatement's arguments
addEntry.setString(1, getFirstName());
addEntry.setString(2, getLastName());
addEntry.setString(3, getStreet());
addEntry.setString(4, getCity());
addEntry.setString(5, getState());
addEntry.setString(6, getZipcode());
addEntry.executeUpdate(); // insert the entry
return "index"; // go back to index.xhtml page
} // end try
finally {
connection.close(); // return this connection to pool
} // end finally
} // end method save
// return a ResultSet of entries
public ResultSet getAddresses() throws SQLException {
// check whether dataSource was injected by the server
if (dataSource == null)
throw new SQLException("Unable to obtain DataSource");
// obtain a connection from the connection pool
Connection connection = dataSource.getConnection();
// check whether connection was successful
if (connection == null)
throw new SQLException("Unable to connect to DataSource");
try {
// create a PreparedStatement to insert a new address book entry
PreparedStatement getAddresses = connection.prepareStatement(
"SELECT FIRSTNAME, LASTNAME, STREET, CITY, STATE, ZIP " +
"FROM ADDRESSES ORDER BY LASTNAME, FIRSTNAME");
CachedRowSet rowSet = new com.sun.rowset.CachedRowSetImpl();
rowSet.populate(getAddresses.executeQuery());
return rowSet;
} // end try
finally {
connection.close(); // return this connection to pool
} // end finally
} // end method getAddresses
} // end class AddressBean
数据库 SQL
DROP TABLE Addresses;
CREATE TABLE Addresses
(
AddressID INT NOT NULL GENERATED ALWAYS AS IDENTITY,
FirstName VARCHAR (30) NOT NULL,
LastName VARCHAR (30) NOT NULL,
Street VARCHAR (150) NOT NULL,
City VARCHAR (30) NOT NULL,
State VARCHAR (2) NOT NULL,
Zip VARCHAR (5) NOT NULL,
PRIMARY KEY (AddressID)
);
INSERT INTO Addresses (FirstName,LastName,Street,City,State,Zip) VALUES
('Bob','Green','5 Bay St.','San Francisco','CA','94133'),
('Liz','White','100 5th Ave.','New York','NY','10011'),
('Mike','Brown','3600 Delmar Blvd.','St. Louis','MO','63108'),
('Mary','Green','300 Massachusetts Ave.','Boston','MA','02115'),
('John','Gray','500 South St.','Philadelphia','PA','19147'),
('Meg','Gold','1200 Stout St.','Denver','CO','80204'),
('James','Blue','1000 Harbor Ave.','Seattle','WA','98116'),
('Sue','Black','1000 Michigan Ave.','Chicago','IL','60605');
【问题讨论】: