使用 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