java - 未填写托管 bean ArrayList 的 sql 语句中的列表
问题描述
Database.java 在名为 CategoryBean.java 的托管 bean 中填充了一个名为“results”的结果列表,我试图在一个名为“category”的数组列表中实现这些结果。最终,这个列表应该在 category.xhtml 中可见。在这个过程中的某个地方,我的代码中有一个错误。我对 Java 很陌生(并且在另一个主题上找不到解决方案),所以所有的帮助都非常受欢迎。
关于数据库,表 'Categories' 有两个属性: - category_Id (int) - description (string)
数据库.java
public List<Category> getCategories()
throws SQLException, NamingException {
List<Category> result = new ArrayList<Category>();
String sql = "select * from categories order by description";
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = getConnection();
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
Category category = new Category();
category.setCategoryId(
resultSet.getInt("category_id"));
category.setDescription(
resultSet.getString("description"));
result.add(category);
}
} finally {
if (resultSet != null && !resultSet.isClosed()) {
resultSet.close();
}
if (preparedStatement != null
&& !preparedStatement.isClosed()) {
preparedStatement.close();
}
if (connection != null && !connection.isClosed()) {
connection.close();
}
}
return result;
}
}
CategoryBean.java
public class CategoryBean implements Serializable {
private Database db = new Database();
private ArrayList<Category> categories;
public ArrayList<Category> getCategory(){
if (categories == null) {
categories = new ArrayList<>();
}
try {
categories.addAll(db.getCategories());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return categories;
}
}
类别.xhtml
<head>
<title>Categories</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h:outputLabel value="Categories" styleClass="kop" />
<h:body styleClass="body" />
<p />
<h:dataTable value="#{categoriesBean.categories}" var="item">
<h:column>
<f:facet name="header">
<h:outputLabel value="description" />
</f:facet>
<h:outputLabel value="#{item.description}" />
</h:column>
</h:dataTable>
</body>
解决方案
private Database db = new Database();
private ArrayList<Category> categories;
public ArrayList<Category> getCategory(){
if (categories == null) {
categories = new ArrayList<>();
}
try {
categories.addAll(db.getCategories());
在上面的部分中,您已经声明了 new Database() 但没有在其中设置任何值,您应该将 Category 对象(带值)设置到 db 对象中。例如。
db.setCategories(categoryList) // with values set
推荐阅读
- java - GraphQL 分页:游标与偏移
- node.js - Node/Express 服务器在变量集之前启动
- python - 熊猫系列时间,必须转换为日期时间
- f# - F# - 限制函数输入中的可区分联合大小写
- javascript - 我们如何使用 Cypress.io Js 自动化框架测试警报及其显示的文本?
- c# - 使用 Angular Controller 从 Web Api 获取响应
- shopify - Liquid:如何以编程方式更改 Shopify 主题的语言?
- python - 使用相同的脚本进行训练和服务(Estimator + hub)
- javascript - 无法加载 Firebase(重定向错误)
- google-analytics - 在 GTM 上动态加载多个 Google Analytics