【问题标题】:Edit and update same textbox编辑和更新同一个文本框
【发布时间】:2012-08-29 03:27:44
【问题描述】:

我有一个可以编辑值的数据库表。我想更新相同的,下面是我尝试过的代码。

表格代码如下

<table border="1px">
    <tr>
        <td><b>DBID</b></td>
        <td><b>Query Raised</b></td>
        <td><b>Time Raised</b></td>
        <td><b>Query Answered</b></td>
        <td><b>Time Answered</b></td>
    </tr>
<%
try {
    ps = con.prepareStatement("Select DBID, Query_Raised, TR, Query_Answered, TA from Scope1 where TR!='null'");

    rs = ps.executeQuery();

    while(rs.next()) {
%>
    <tr>
        <td><%=rs.getString("DBID")%></td>
        <td><input type="Text" value="<%=rs.getString("Query_Raised")%>" name="Updat"></td>
        <td><%=rs.getString("TR")%> </td>
        <td><%=rs.getString("Query_Answered")%></td>
        <td><%=rs.getString("TA")%></td>
        <td><input type="Submit" value="Update"></td>
    </tr>
<%
    } // while loop ends here

    rs.close();
    con.close();
} catch(Exception e) {
    out.println(e);
}
%>
</table>

并且使用的更新查询是:

String a = request.getParameter("Updat");

ps = con.prepareStatement("Update Scope1 Set Query_Raised = '" + a + "'");

int i = ps.executeUpdate();

if(i == 1) {
    out.print("Done");
} else{
    out.print("Erro");
}

我想知道我应该使用什么条件来更新同一页面中的数据。

谢谢

【问题讨论】:

  • 请不要将数据库代码放在您的 JSP 中! JSP 是 view 组件,您的查询应该封装在 model 端的 bean 中(请参阅here 了解大图)。一旦你建立了这个结构,你会发现很多问题都解决了。
  • 与您的问题相关:在您的&lt;input&gt;字段中添加唯一ID,以便提交后您可以找出哪些已被修改。
  • 通常情况下,为这样的简单案例构建 MVC 纯粹是矫枉过正,因为它需要额外的代码并且需要时间来构建和部署,而仅将代码放入 JSP 需要您基本上刷新页面。
  • @Endy 完全同意你的看法。但现实世界中的任何项目都不会如此小或如此简单。所以我猜 f_puras 只是在提醒(教育)他面对现实世界的场景。

标签: java jsp jdbc


【解决方案1】:

我知道问题的第一部分是 JSP,比如 update.jsp,第二部分似乎是你的 servlet,比如 UpdateServlet

所以在你的update.jsp 的每一行都有一个&lt;input type="text"&gt;submit 按钮,但我认为&lt;form&gt; 只是一个必须在&lt;table&gt; 之外的按钮,所以这是我的解决方案(选择任何一个):

  1. 为每一行使用多个&lt;form&gt;标签,比如

    <form action="whatever_action_you_have_which_calls_the_servlet"
          name="form<%=rs.getString("DBID")%>"
          id="formID<%=rs.getString("DBID")%>">
       // Including name and id so that the different forms remain unique
        <tr>
            <td><%=rs.getString("DBID")%></td>
            <td><input type="Text" value="<%=rs.getString("Query_Raised")%>" name="Updat"></td>
            <td><%=rs.getString("TR")%> </td>
            <td><%=rs.getString("Query_Answered")%></td>
            <td><%=rs.getString("TA")%></td>
            <td><input type="Submit" value="Update"></td>
        </tr>
    </form>
    

    因此,当您单击提交时,它将提交单击了submit 按钮的&lt;form&gt;,并且将仅提交已编辑的input,瞧!您的 servlet 代码也可以正常工作。

  2. 您可以在同一个 JSP 中拥有两个代码块,然后使用第 1 点中描述的&lt;form&gt; 代码 sn-p,第二个代码 sn-p 将是:

    String a = request.getParameter("Updat");
    
    if ( (a is not empty) or (a is not null)  ) {
        ps = con.prepareStatement("Update Scope1 Set Query_Raised = '" + a + "'");
    
        int i = ps.executeUpdate();
    
        if(i == 1) {
            out.print("Done");
        } else{
            out.print("Error");
        }
    }
    
    ...
    
    <form action="whatever_action_you_have_which_will_call_this_JSP" ...>
        <tr> ... your code as in point#1
        </tr>
    </form>
    
  3. Endy 所说,使用 ajax 和其他 javascript DOM 操作方法来完成此操作。
    为此,您需要拥有 JSP(用于显示)和 Servlet(用于更新代码)。
    这可能需要付出更多的努力,但您将学习 Ajax,并且会更接近现实世界。
    到目前为止,jQuery ajax 是最简单易用的。

注意:
仅作记录,我知道您可能正在练习,但如果您打算在实际项目中使用它,请继续阅读。

在 JSP 中使用 scriptlet 是一种不好的做法(除非确实需要,而且如果它用于视图级逻辑而不是业务或数据级逻辑),甚至 更糟糕的 是在 JSP 中使用 JDBC 代码。所以如果你能关注 f_puras 的advice,那就太好了。

如果你想知道我为什么要听你不请自来的建议,那么这里有一些值得深思的地方:

希望这会有所帮助。

【讨论】:

  • 感谢 Prakash,这对我有帮助
【解决方案2】:

您可以使用 AJAX 将数据发布到处理更新的页面,然后将结果作为回调返回,请参阅http://api.jquery.com/jQuery.post/

其他解决方案是在处理完提交后将用户转发回带有表单的页面。

第三种解决方案是将数据提交到同一页面并在那里解析/更新。

【讨论】:

  • 嗨,恩迪,你能告诉我如何用上面提到的第三种方法做到这一点。谢谢
  • 基本上将您的“更新查询”部分移动到表单所在的同一页面。这不是一个很好的做法,但效果很好。
猜你喜欢
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
相关资源
最近更新 更多