使用 jsp 的星级评分更新 SQL 数据库
Update SQL database with star rating from jsp
我使用 jsp 来呈现从用户查询中检索到的一些数据。每次输入查询时,jdbc 都会将一些上下文数据和查询本身保存在 MySQL 数据库中。我会增加用户对每个结果进行评分的可能性,并且我已经制作了一个评分系统,该系统将以数字形式表示评分,当用户点击带编号的星号时,这些数字将插入数据库中(例如** ** *** **** 对应于 2 5 4)。
为此,我在我的 jdbc 中有此代码:
PreparedStatement preps = null;
preps = dbMySqlConn.prepareStatement("" +
" UPDATE " + dbName + "." + tableNameOutput +
" SET" + " ratings = ?" +
" WHERE id = " + queryID , Statement.RETURN_GENERATED_KEYS);
if (stars != null) {
preps.setString(19, stars);
}
preps.execute();
主要 jsp 我通过以下方式可视化评级系统:
" <form name=\"rating\"\">\n" +
" <input class=\"star star-5\" id=\"star" + sessionTime + i + "-5\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-5\" for=\"star" + sessionTime + i + "-5\" title=\"Perfect match\"></label>\n" +
" </input>" +
" <input class=\"star star-4\" id=\"star" + sessionTime + i + "-4\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-4\" for=\"star" + sessionTime + i + "-4\" title=\"Excellent match\"></label>\n" +
" </input>" +
" <input class=\"star star-3\" id=\"star" + sessionTime + i + "-3\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-3\" for=\"star" + sessionTime + i + "-3\" title=\"Good match\"></label>\n" +
" </input>" +
" <input class=\"star star-2\" id=\"star" + sessionTime + i + "-2\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-2\" for=\"star" + sessionTime + i + "-2\" title=\"Fair match\"></label>\n" +
" </input>" +
" <input class=\"star star-1\" id=\"star" + sessionTime + i + "-1\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-1\" for=\"star" + sessionTime + i + "-1\" title=\"Wrong match\"></label>\n" +
" </input>" +
" </form>\n" +
它调用一个 java 脚本函数,它是:
" function saveRating(){\n" +
"if ($('.star.star-5')[0].checked){" +
"alert(\"Rating 5 saved\");" +
"}" +
"if ($('.star.star-4')[0].checked){" +
"alert(\"Rating 4 saved\");" +
"}" +
"if ($('.star.star-3')[0].checked){" +
"alert(\"Rating 3 saved\");" +
"}" +
"if ($('.star.star-2')[0].checked){" +
"alert(\"Rating 2 saved\");" +
"}" +
"if ($('.star.star-1')[0].checked){" +
"alert(\"Rating 1 saved\");" +
"}" +
"else{" +
"}" +
" }\n" +
"</script>" +
显示警报效果很好,但如果我将警报替换为它的目的,jdbc 插入:
"MySqlJDBC.rate(servletPath, \"1\");"
"MySqlJDBC.rate(servletPath, \"2\");"
"MySqlJDBC.rate(servletPath, \"3\");"
"MySqlJDBC.rate(servletPath, \"4\");"
"MySqlJDBC.rate(servletPath, \"5\");"
它根本不起作用,我问自己为什么警报会起作用,为什么 java 方法的调用不起作用。
在 jsp 内解决,代码:
"if ($('.star.star-1')[0].checked){" +
" $.ajax({" +
" type: \"POST\"," +
" url: \"" + servletPath + "/servletName\"," +
" data: { operation: \"operation1\", userRating:stars, resId: numberOfQuery }" +
" }).done(function() {" +
" alert( \"Success\");" +
" });" +
" }" +
并在调用 SQL 语句的 servlet 中创建一个 doPost。
正确的流程是:
jsp 标记 -> jsp 调用 ajax 的函数 -> servlet doPost -> JDBC
我使用 jsp 来呈现从用户查询中检索到的一些数据。每次输入查询时,jdbc 都会将一些上下文数据和查询本身保存在 MySQL 数据库中。我会增加用户对每个结果进行评分的可能性,并且我已经制作了一个评分系统,该系统将以数字形式表示评分,当用户点击带编号的星号时,这些数字将插入数据库中(例如** ** *** **** 对应于 2 5 4)。 为此,我在我的 jdbc 中有此代码:
PreparedStatement preps = null;
preps = dbMySqlConn.prepareStatement("" +
" UPDATE " + dbName + "." + tableNameOutput +
" SET" + " ratings = ?" +
" WHERE id = " + queryID , Statement.RETURN_GENERATED_KEYS);
if (stars != null) {
preps.setString(19, stars);
}
preps.execute();
主要 jsp 我通过以下方式可视化评级系统:
" <form name=\"rating\"\">\n" +
" <input class=\"star star-5\" id=\"star" + sessionTime + i + "-5\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-5\" for=\"star" + sessionTime + i + "-5\" title=\"Perfect match\"></label>\n" +
" </input>" +
" <input class=\"star star-4\" id=\"star" + sessionTime + i + "-4\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-4\" for=\"star" + sessionTime + i + "-4\" title=\"Excellent match\"></label>\n" +
" </input>" +
" <input class=\"star star-3\" id=\"star" + sessionTime + i + "-3\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-3\" for=\"star" + sessionTime + i + "-3\" title=\"Good match\"></label>\n" +
" </input>" +
" <input class=\"star star-2\" id=\"star" + sessionTime + i + "-2\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-2\" for=\"star" + sessionTime + i + "-2\" title=\"Fair match\"></label>\n" +
" </input>" +
" <input class=\"star star-1\" id=\"star" + sessionTime + i + "-1\" type=\"radio\" onClick=\"javascript:saveRating()\" name=\"star\"/>\n" +
" <label class=\"star star-1\" for=\"star" + sessionTime + i + "-1\" title=\"Wrong match\"></label>\n" +
" </input>" +
" </form>\n" +
它调用一个 java 脚本函数,它是:
" function saveRating(){\n" +
"if ($('.star.star-5')[0].checked){" +
"alert(\"Rating 5 saved\");" +
"}" +
"if ($('.star.star-4')[0].checked){" +
"alert(\"Rating 4 saved\");" +
"}" +
"if ($('.star.star-3')[0].checked){" +
"alert(\"Rating 3 saved\");" +
"}" +
"if ($('.star.star-2')[0].checked){" +
"alert(\"Rating 2 saved\");" +
"}" +
"if ($('.star.star-1')[0].checked){" +
"alert(\"Rating 1 saved\");" +
"}" +
"else{" +
"}" +
" }\n" +
"</script>" +
显示警报效果很好,但如果我将警报替换为它的目的,jdbc 插入:
"MySqlJDBC.rate(servletPath, \"1\");"
"MySqlJDBC.rate(servletPath, \"2\");"
"MySqlJDBC.rate(servletPath, \"3\");"
"MySqlJDBC.rate(servletPath, \"4\");"
"MySqlJDBC.rate(servletPath, \"5\");"
它根本不起作用,我问自己为什么警报会起作用,为什么 java 方法的调用不起作用。
在 jsp 内解决,代码:
"if ($('.star.star-1')[0].checked){" +
" $.ajax({" +
" type: \"POST\"," +
" url: \"" + servletPath + "/servletName\"," +
" data: { operation: \"operation1\", userRating:stars, resId: numberOfQuery }" +
" }).done(function() {" +
" alert( \"Success\");" +
" });" +
" }" +
并在调用 SQL 语句的 servlet 中创建一个 doPost。
正确的流程是: jsp 标记 -> jsp 调用 ajax 的函数 -> servlet doPost -> JDBC