【问题标题】:My response.jsp won't populate fields properly我的 response.jsp 无法正确填充字段
【发布时间】:2013-08-09 19:48:41
【问题描述】:

我一直在开发一个连接到填充指定字段的数据库的网络应用程序。它基本上是netbeans tutorial 的编辑。好吧,我已经设置了数据库并通过在响应页面上填充所有信息的表来测试它。当我从列表中选择要查看的标题之一时,index.jsp 出现了问题。我使用标题而不是 ID 号来选择书籍:

SELECT titlefk FROM BookList

代替:

SELECT id, titlefk FROM BookList

因为下拉框会同时显示 ID 和标题作为选项。选择书名并单击提交键后,它应该使用数据库中的相应信息填充下一页。

网站图片:http://imgur.com/a/kVEMN

上表是检查数据库是否连接的临时措施。我在数据库中选择了第三个选项,但我的 response.jsp 一直在填充第一本书的信息。我不确定我在代码中遗漏了什么,但我希望有人能指出我正确的方向。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>

<sql:query var="books" dataSource="jdbc/IFPBOOKLISTRT">
SELECT titlefk FROM BookList
</sql:query>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
        <title>IFPBOOKLIST Homepage</title>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
        <h1>Welcome to IFPBOOKLIST, My Personal Book Selection</h1>

    <table border="0">
        <thead>
            <tr>
                <th>Here you will find my personal books to-do list</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>To view details, select a book below</td>
            </tr>
            <tr>
                <td><form action="response.jsp">
                        <strong>Select a book:</strong>
                        <select name="subject_id">
                            <c:forEach var="row" items="${books.rowsByIndex}">
                                <c:forEach var="column" items="${row}">
                                <option value="<c:out value="${column}"/>"><c:out value="${column}"/></option>
                                </c:forEach>
                            </c:forEach>
                        </select>
                        <input type="submit" value="submit" name="submit" />
                    </form>
                </td>
            </tr>
        </tbody>
    </table>


</body>

这里是 response.jsp

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>

<sql:query var="bookQuery" dataSource="jdbc/IFPBOOKLISTRT">
    SELECT * FROM BookList,Book
    WHERE Book.id=BookList.id

</sql:query>

<c:set var="bookDetails" value="${bookQuery.rows[0]}"/>

<table border="1">
    <!-- column headers -->
    <tr>
        <c:forEach var="columnName" items="${bookQuery.columnNames}">
        <th><c:out value="${columnName}"/></th>
    </c:forEach>
</tr>
<!-- column data -->
<c:forEach var="row" items="${bookQuery.rowsByIndex}">
    <tr>
    <c:forEach var="column" items="${row}">
        <td><c:out value="${column}"/></td>
    </c:forEach>
    </tr>
</c:forEach>
</table>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
        <title>${bookDetails.title}</title>
    </head>
    <body>
       <table border="0">
    <thead>
        <tr>
        <th colspan="2">${bookDetails.title}</th>
        </tr>
        <tr>
            <td>Edition: <a href="placeholder">${bookDetails.edition}</a></td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <strong>Description: </strong>
            </td>
            <td>
                {placeholder}
            </td>
            <link rel="stylesheet" type="text/css" href="style.css">
        </tr>
        <tr>
            <td>
                <strong>Publisher </strong>
            </td>
            <td>
                ${bookDetails.publisher}
            </td>
        </tr>
        <tr>
            <td>
                <strong>
                    Published Date
                </strong>
            </td>
            <td>
                ${bookDetails.datePublished}
            </td>
        </tr>
        <tr>
            <td>
                <strong>Author </strong>
            </td>
            <td>
                ${bookDetails.author}
            </td>
        </tr>
         <tr>
            <td>
                <strong>isbnNumber </strong>
            </td>
            <td>
                <a href="placeholder">${bookDetails.isbnNumber}</a>
                <br>
            </td>
         </tr>
         <tr>
             <td>
                 <strong>Amazon Link: </strong></td>
             <td>
                 <a href="placeholder">${bookDetails.amazonLink}</a>
                <br>
             </td>
         </tr>
    </tbody>
   </table>
</body>

【问题讨论】:

  • 让我们看看你的 response.jsp
  • 哦对对对。对不起。

标签: javascript html mysql css glassfish


【解决方案1】:

你所缺少的很简单。你应该可以很容易地把它打成形状。

  • index.jsp 文件的工作是为用户提供一个列表 options,允许他们选择一个,然后传递选择的选项 转到 response.jsp。
  • response.jsp 的工作是采用选定的选项,并且 显示有关它的更多详细信息。

您永远不会阅读选定的选项,请在 response.jsp 中查看您的查询实际上是提取所有书籍,然后选择数据库返回的第一本(例如 rows[0] ):

<sql:query var="bookQuery" dataSource="jdbc/IFPBOOKLISTRT">
    SELECT * FROM BookList,Book
    WHERE Book.id=BookList.id
</sql:query>

<c:set var="bookDetails" value="${bookQuery.rows[0]}"/>

在response.jsp中你需要做的是:

1) 读取index.jsp传入的subject_id参数。

2) 使用 subject_id 过滤(通过 SQL WHERE 子句)您的 bookQuery,以便只返回被选中的书。

回到你的教程,如果你仔细看看接近尾声,在 response.jsp 下面的第 3 项,你会看到他们是如何做到的:

<sql:query var="counselorQuery" dataSource="jdbc/IFPWAFCAD">
    SELECT * FROM Subject, Counselor
    WHERE Counselor.counselor_id = Subject.counselor_idfk
    AND Subject.subject_id = ? <sql:param value="${param.subject_id}"/>
</sql:query>

希望这会有所帮助!

【讨论】:

  • 它做到了@mikey,谢谢。我真的明白我错过了什么。不幸的是,我添加了最后一行(当然名称正确),现在它甚至不会显示数据库表。我在更改 BookListSubjectidsubject_id 时添加了最后一行,因为这就是我设置它的方式向上。这些字段现在根本没有填充。我会给你一个赞成票,但我还没有足够的分数。
  • 请记住,您并没有传递 id,而是传递了 'titlefk'。所以你现在基本上是在说:“给我所有主题 id = 的书” 因为主题 id 和 titlefk 是不同的字段,没有匹配项,所以字段没有填充。
  • 是的,我明白你的意思,但我想如果你看到它会更好:WHERE Book.title=BookList.titlefk AND BookList.titlefk = ? 这是我目前拥有的,尚未填充。我也试过 WHERE Book.title=BookList.titlefk AND BookList.titlefk = ? 没有运气。很抱歉没有得到明显的结果,但我还没有运气。
  • param.whatever 需要匹配另一个文件中选择标签的 'name' 属性。上面是subject_id。所以 param.subject_id
猜你喜欢
  • 1970-01-01
  • 2013-12-05
  • 2022-09-28
  • 2022-01-19
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
相关资源
最近更新 更多