【问题标题】:get value of selected dynamic row of table in jsp在jsp中获取选定动态表行的值
【发布时间】:2014-03-06 22:11:32
【问题描述】:

我在 jsp 中有一个页面,我在其中动态地在表中显示数据库中的记录,并生成动态行。每行都有一个单选按钮,以便用户可以选择一行。

page1.jsp 的代码是:

<form action="page2.jsp" method="post">

<table>
<%
 try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb,        *.accdb)};DBQ=C:/Users/hp/Documents/Sample1.accdb";

Connection con = DriverManager.getConnection(database, "", ""); 
Statement stmnt = con.createStatement();

String source=request.getParameter("from");
String dest=request.getParameter("to")
ResultSet resultset = stmnt.executeQuery("select * from Trains123 where From='" +source+    "' and To='" +dest+ "' ");

     while(resultset.next())
     {          
         %>        

<tr>

<td><% out.println(resultset.getString("From")); %></td>
<td><% out.println(resultset.getString("To")); %></td>
<td><% out.println(resultset.getString("TrainName")); %></td>        


<td><input type="radio" name="TName" value="<%=    resultset.getString("TrainName")%>">book</td>
</tr>
</table>
</form>

page2.jsp 上的代码是:

<% out.println(request.getParameter("Tname")); %>

记录集没有问题,正在打印值。但没有显示单选按钮。此外,如果记录集中有 2 条记录,则只有第一个不打印单选按钮。我调试了文件,控件停在单选按钮行。

我不知道错误在哪里,以及为单选按钮提供动态值有什么问题。 我要做的就是找出用户选择的行。

【问题讨论】:

    标签: java jsp dynamic radio-button


    【解决方案1】:

    AFAIR JDBC 规范不保证您可以在具有相同列名称/编号的结果集上调用 getXxx 两次。大多数 JDBC 驱动程序都支持它,但有些可能不支持。我不确定 ODBC 是否可能不是这个例外。所以首先尝试将一行中所有列的值获取到额外的变量,如下所示:

    String from = resultset.getString("From");
    String to = resultset.getString("To");
    String trainName = resultset.getString("TrainName");
    

    并以这种方式使用它:

    <tr><td><%=form%></td>
        <td><%=to%></td>
        <td><%=trainName%></td>
        <td><input type="radio" name="TName" value="<%=trainName%>"/> book</td>
    </tr>
    

    另外请转义这些值,好像trainName 将包含'"' 字符,您可能会破坏HTML 代码。

    但更重要的是您编写代码的方式。首先,您应该将视图层(JSP)与代码分开。所以你应该创建一个类,读取火车列表并简单地将其放入请求中,或多或少像这样:

    public class RailLink {
        public String from;
        public String to;
        public String trainName;
    }
    
    public class Trains {
    
        private Connection getConnection() {
            //- This code actually should be put somewhere else.
    //          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    //          String db = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/hp/Documents/Sample1.accdb";
    //          Connection cn = DriverManager.getConnection(db, "", ""); 
                return cn;
        }
    
        public static List<RailLink> findLinks(String from, String to) {
            assert from != null && to != null;
            List<RailLinks> links = new LinkedList<>();
            try (
                Connection cn = getConnection();
                PreparedStatement ps = cn.prepareStatement("SELECT * FROM Trains123 WHERE \"From\" = ? AND \"To\" = ?");
            ) {
                ps.setString(1, from);
                ps.setString(2, to);
                try (ResultSet rs = ps.executeQuery()) {
                    while (rs.next()) {
                        RailLink link = new RailLink();
                        link.from = rs.getString("From");
                        link.to = rs.getString("To");
                        link.trainName = rs.getString("TrainName");
                        links.add(link);
                    }
                }
            }
            return links;
        }
    }
    

    现在编写一个处理表单的 servlet:

    public class FindLinks extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse respone) {
            List<RailLink> links = Trains.findLinks(request.getParameter("from"), request.getParameter("to"));
            request.setAttribute("rail-links", links);
            request.getRequestDispatcher("page1.jsp").forward(request, response);
        }
    }
    

    最后将你的 page1.jsp 修改为:

    <%@page ...%>
    ...
    <%  List<RailLink> links = request.getAttribute("rail-links");
        if (links != null) {%>
            <table><%
            for (RailLink l : links) {%>
                <tr><td><%=l.from%></td>
                    <td><%=l.to%></td>
                    <td><%=l.trainName%></td>
                    <td><input type="radio" name="TName" value="<%=l.trainNam%"/> book</td>
            <%}%>
            </table><%
        }
        else {%>
            <p>No connections found.</p><%
        }%>
    

    祝你好运。

    【讨论】:

    • 这个方法我也试过了 book 但它不起作用.无论我在哪里尝试输入服务器端代码,它都不起作用。
    • 我没有收到任何错误。我只是得到一个空的 .没有错误我对java很陌生,我刚刚知道jsp,对不起,我不知道servlet等等。有什么办法只用jsp来解决吗?
    • 很难用这种方式追踪它...好吧,在什么服务器上运行您的 JSP?雄猫?码头?还有什么?
    • 我正在使用 GlassFish 服务器。
    • 你能得到日志吗?阅读此处stackoverflow.com/questions/13835913/…,了解如何在 GlassFish 上找到它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2020-01-07
    • 2021-04-10
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多