我正在创建一堵墙,它的外观和行为应该类似于 Facebook 的墙。我面临的问题是,我想让它能够对帖子发表评论。但我似乎不知道如何使评论表单出现在帖子中(带有 type=text
的输入字段)。
所以我有一段代码可以通过 while 循环将所有帖子和以下评论从数据库打印到网站。但我不知道如何让它用按钮打印一行来创建输入表单 onclick。
代码如下,首先是丹麦语-英语翻译:
beskeder
= 我的 MySQL 数据库中包含帖子的表kommentarer
= 我的 MySQL 数据库中包含帖子评论的表navn
= 名称询问
= 消息kommentar
= 评论
JSP 代码:
<%
if (wallrs != null) {
while(wallrs.next()) {
%>
<br><b><%=wallrs.getString("navn")%></b>
<br><%=wallrs.getString("besked") %>
<%
int wallrsid = wallrs.getInt("id");
dbconnect.getKommentarResultset(wallrsid);
ResultSet kommentarrs = dbconnect.getKommentarRS();
if (kommentarrs != null) {
while (kommentarrs.next()) {
%>
<Blockquote>
<b><%=kommentarrs.getString("navn") %>:</b>
<br><%=kommentarrs.getString("kommentar") %>
</Blockquote>
<%
}
}
%>
<form id="besked<%= wallrsid%>"></form>
<button type="submit" onclick="show_form()">Kommenter</button>
<%
}
}
%>
它链接到的 JavaScript 函数:
function show_form() {
document.getElementById("besked").innerHTML = "<input type=text value=Skriv>";
}
JavaBean:
public void createMessage(String besked, String ip) {
try {
PreparedStatement pstmcreateMessage = con.prepareStatement("INSERT INTO beskeder(navn, besked, ip) VALUES(?,?,?)");
pstmcreateMessage.setString(1, getName());
pstmcreateMessage.setString(2, besked);
pstmcreateMessage.setString(3, ip);
pstmcreateMessage.executeUpdate();
System.out.println("SUCCES! ");
} catch(Exception e) {
e.printStackTrace();
System.out.println("Can't create message");
}
}
public void createComment(String kommentar, String ip, int beskedid) {
try {
PreparedStatement pstmcreateComment = con.prepareStatement("INSERT INTO kommentarer(navn, kommentar, ip, beskedid) VALUES(?,?,?,?)");
pstmcreateComment.setString(1, getName());
pstmcreateComment.setString(2, kommentar);
pstmcreateComment.setString(3, ip);
pstmcreateComment.setInt(4, beskedid);
} catch(Exception e) {
e.printStackTrace();
System.out.println("Can't create comment");
}
}
// Returner hele væggen i et result set
private ResultSet wallRS;
public void getWallResultset() {
PreparedStatement getWall;
try {
getWall = con.prepareStatement("SELECT * FROM beskeder");
wallRS = getWall.executeQuery();
} catch (SQLException e) {
System.out.println("Error in resultset wall rs");
// e.printStackTrace();
}
}
public ResultSet getWallrs() {
return wallRS;
}
// Returner kommentarer
private ResultSet kommentarRS;
public void getKommentarResultset(int beskedid) {
PreparedStatement getComment;
try {
getComment = con.prepareStatement("SELECT * FROM kommentarer WHERE beskedid=?");
getComment.setInt(1, beskedid);
kommentarRS = getComment.executeQuery();
} catch(Exception e) {
e.printStackTrace();
}
}
public ResultSet getKommentarRS() {
return kommentarRS;
}
如您所见,带有 id="besked"
的表单并不唯一,因此我无法使它们单独显示。怎么解决呢?
最佳答案
您需要将表单 ID 传递给 JS 函数,以便它可以找到正确的表单。
替换
<button type="submit" onclick="show_form()">Kommenter</button>
由
<button onclick="show_form('besked<%= wallrsid%>')">Kommenter</button>
并替换
function show_form() {
document.getElementById("besked").innerHTML = "<input type=text value=Skriv>";
}
由
function show_form(id) {
document.getElementById(id).innerHTML = '<input type="text" name="kommentar" value="Skriv">';
}
<小时/>
与具体问题无关,scriptlet被认为是 poor practice你的 JDBC 代码是 leaking数据库资源。
关于java/jsp使用一种javascript方法对多个表单进行不同的修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8246599/