p:autocomplete 标记使用数据库

p:autocomplete tag using database

我想在 inputTextArea 中使用自动完成功能。我正在使用数据库中的值来做这件事。我在数据库中存储了单词、数字、符号(如#)。

问题是当我尝试在 textArea 中键入时,出现了整个列表。相反,我只希望出现与 textArea 中写入的输入相匹配的选项,这是一种自动完成功能,但它会从数据库中获取值。 下面给出的是我到目前为止编写的 java 代码。

public class DbConnect {


    public List<String> completeArea(String query1) {

        ResultSet rs;
        Statement st;
        Connection con;
        PreparedStatement pst;
        List<String> result = new ArrayList<String>();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/company", "root", "");

            try {
                query1 = "select name from labels";
                pst = con.prepareStatement(query1);
                rs = pst.executeQuery();
                while (rs.next()) {
                    result.add(rs.getString("name"));
                }
            } catch (Exception ex) {
                System.out.println(ex);
            }
        } catch (Exception ex) {
            System.out.println("error occured" + ex);
        }
        System.out.println("size is " + result.size());
        return result;
    }

我不想指定任何特定字母在数据库中搜索,它应该在用户输入时自动选择。任何帮助都会有帮助。非常感谢。

您的查询是

select name from labels

这将给出所有标签的名称...

I do not want to specify any particular letter for searching in the database, it should pick automatically when the user types in. Any help would do good.

如果你想要一些匹配,你必须指定一个条件

在您的示例中,completeArea 方法的 query1 参数是用户输入,但您用查询覆盖了它。试试

public List<String> completeArea(String input) {
   ...
   String query = "select name from labels where name like ?";
   pst = con.prepareStatement(query);
   pst.setString(1, input + "%");
   ...
}

根据@Slaw 评论编辑。谢谢指正。 :)


对于这个用例,我会使用 <p:autoComplete /> 而不是 inputTextArea。

您可以在 official PrimeFaces 站点找到很好的教程。