首先,我在这方面完全是个初学者.
所以,我试着通过搜索栏和流派过滤器进行简单的数据库搜索,使用我在SQL数据库上放置的流派表.
<form action="ItemListController">
<div class="btn-group me-2" role="group" aria-label="Genres">
<button class="btn btn-outline-secondary" type="submit" name="gnr"
value="<%= genre = "Fantasy" %>">Fantasy</button>
<button class="btn btn-outline-secondary" type="submit" name="gnr"
value="<%= genre = "Action" %>">Action</button>
<button class="btn btn-outline-secondary" type="submit" name="gnr"
value="<%= genre = "FPS" %>">FPS</button>
</div>
</form>
public List<Item> findByKeyword(ServletContext context, String word, String genre) {
List<Item> result = new ArrayList<>();
try {
Class.forName("org.sqlite.JDBC");
String url = "jdbc:sqlite:" + context.getRealPath("WEB-INF/webapp.db");
Connection conn = DriverManager.getConnection(url);
String sql = "select * from games where GameName like ? order by GameID";
String sql2 = "select * from games where Genre like ? order by GameID";
PreparedStatement stmt1 = conn.prepareStatement(sql);
PreparedStatement stmt2 = conn.prepareStatement(sql2);
stmt1.setString(1, "%" + word + "%");
stmt2.setString(1, "%" + genre + "%");
ResultSet rs = stmt1.executeQuery();
ResultSet rs1 = stmt2.executeQuery();
while (rs.next()) {
Item item = new Item();
item.setItemId(rs.getInt("GameID"));
item.setItemName(rs.getString("GameName"));
item.setGenre(rs.getString("Genre"));
item.setDescription(rs.getString("Description"));
item.setImage(rs.getString("GameCover"));
item.setPrice(rs.getInt("Price"));
item.setLink(rs.getString("Link"));
result.add(item);
}
conn.close();
while (rs1.next()) {
Item item = new Item();
item.setItemId(rs1.getInt("GameID"));
item.setItemName(rs1.getString("GameName"));
item.setGenre(rs1.getString("Genre"));
item.setDescription(rs1.getString("Description"));
item.setImage(rs1.getString("GameCover"));
item.setPrice(rs1.getInt("Price"));
item.setLink(rs1.getString("Link"));
result.add(item);
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
@WebServlet("/ItemListController")
public class ItemListController extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String word = request.getParameter("keyword");
String genre = request.getParameter("gnr");
if (word == null) {
word = "";
}
L
ItemModel im = new ItemModel();
// List<Item> items = im.findAll(getServletContext());
List<Item> items = im.findByKeyword(getServletContext(), word, genre);
request.setAttribute("items", items);
request.setAttribute("word", word);
request.setAttribute("genre", genre);
request.getRequestDispatcher("/itemListView3.jsp").forward(request, response);
}
}
问题是,参数对URL起作用,我可以看到这一点,但不会基于过滤器进行任何搜索.它返回时就好像它是空的,并显示所有数据.