Java/jsp使用一个javascript方法以不同的方式修改多个表单

Java/jsp use one javascript method to modify multiple forms differently

本文关键字:方式 表单 修改 方法 一个 jsp Java javascript      更新时间:2023-09-26

我正在创建一个看起来和行为都像Facebook墙的墙。我面临的问题是,我想让它能够评论帖子。但我似乎不明白,如何使评论表单出现(一个输入字段与type=text)的帖子。

所以我有一个代码块打印出所有的帖子和以下评论从数据库到网站通过while循环。但是我不知道如何让它打印一行按钮来创建一个输入表单onclick。

代码如下,首先是丹麦语-英语的翻译:

  • beskeder =表在我的MySQL数据库中包含的帖子
  • kommentarer =表在我的MySQL数据库包含评论的帖子
  • navn = name
  • besked = message
  • kommentar = comment
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 被认为是不良实践,您的JDBC代码正在泄漏DB资源。