首页 > 解决方案 > 未填写托管 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>

标签: javajsf

解决方案


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

推荐阅读