在页面之间传递会话变量值

时间:2015-10-11 08:11:49

标签: java jsp

您好我有多个JSP页面实现了联系人类型数据库。我使用html输入变量将数据从一个页面传递到下一个页面。它显然从第一个jsp到第二个工作。但之后它不再起作用了。名称和数字变量(param.name)不再可以在第四个jsp中访问,或者至少以这种方式出现,因为第四个jsp中的代码没有返回值。下面我有四个jsp。告诉我,如果这是我的代码或我错过了什么?我想在所有jsp上提供输入变量。

jsp 1:

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <sql:setDataSource var="data" driver="org.apache.derby.jdbc.ClientDriver"
     url="jdbc:derby://localhost:1527/testing"
     user="testing"  password="testing"/>
    </head>
    <form action="result.jsp"> 
     Enter name:
    <input type="text" name="name" scope='session'>

    Enter Number
    <input type="text" name="number" scope='session'>
    <input type="submit" value="Search Rolodex" name="submit" />
    </form>

        <br></br>



    <form name="add" action="addData.jsp">
        <input type="submit" value="Add Contact" name="addc" />
    </form>
    <body>

jsp 2:

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <sql:setDataSource var="data" driver="org.apache.derby.jdbc.ClientDriver"
     url="jdbc:derby://localhost:1527/testing"
     user="testing"  password="testing"/>
    </head>

    <body>
        <form name="editp" action="editData.jsp">

        <sql:query var="result" dataSource="${data}">
            SELECT NAME, NUMBER FROM DATA WHERE NAME = '${param.name}' OR NUMBER = '${param.number}'
        </sql:query>

        <table border="1">
            <!-- column headers -->
            <tr>
                <c:forEach var="columnName" items="${result.columnNames}">
                    <th><c:out value="${columnName}"/></th>
                    </c:forEach>
            </tr>
            <!-- column data -->
            <c:forEach var="row" items="${result.rowsByIndex}">
                <tr>
                    <c:forEach var="column" items="${row}">
                        <td><c:out value="${column}"/></td>
                    </c:forEach>
                </tr>
            </c:forEach>
        </table>


                <input type="submit" value="Edit Contact" name="edib" />
            </form>









    </body>
</html>

jsp 3:

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <sql:setDataSource var="data" driver="org.apache.derby.jdbc.ClientDriver"
     url="jdbc:derby://localhost:1527/testing"
     user="testing"  password="testing"/>

    </head>
    <body>
       <form name="editred" action="editRedirect.jsp">


    <input type="text" name="newname" scope='session'>
    <input type="text" name="newnumber" scope='session'>

    <input type="submit" value="Close" name="close" />   
        </form>   
    </body>

</html>

jsp 4

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <sql:setDataSource var="data" driver="org.apache.derby.jdbc.ClientDriver"
                           url="jdbc:derby://localhost:1527/testing"
                           user="testing"  password="testing"/>
    </head>
    <body>

        <form name="sendhome" action="index.jsp">


        <sql:update var="updatevariable" dataSource="${data}">
            UPDATE DATA
            SET NAME = '${param.newname}'
            WHERE NAME = '${param.name}'
        </sql:update> 
        <sql:update var="updatevariable2" dataSource="${data}">
            UPDATE DATA
            SET NUMBER = '${param.newnumber}'
            WHERE NUMBER = '${param.number}'
        </sql:update>  
            <input type="submit" value="Home" name="returnhome" />  
</form>
    </body>

</html>

1 个答案:

答案 0 :(得分:1)

以下是我理解代码逻辑和页面流程的方法。如果我的假设不正确,请告诉我。

JSP 1: 此页面提供搜索联系人的表单。它有2个输入,一个用于名称,一个用于数字。提交表单时,它将转到JSP 2。

JSP 2: 此页面在表格中显示搜索结果。它有一个编辑按钮来编辑联系人。如果单击“编辑”按钮,则会转到JSP 3。

JSP 3: 此页面用于编辑联系人。它提供了2个输入元素,一个用于名称,一个用于数字。提交表单后,它将转到JSP 4。

JSP 4: 此页面包含更新数据库表中联系人的逻辑。它还提供了一个返回HOME页面的按钮(可能是你的JSP 1)。

以下是我对此代码的评论:

<input type="text" name="newname" scope='session'>

我认为<input>元素不具有scope属性。将其设置为session甚至不会使其成为会话变量或存储为可在您的页面上访问的会话变量(只要会话处于活动状态)。它不会那样工作。

您可以在JSP 2中使用<c:set>创建会话变量并使用参数值赋值。通过JSP 1中的表单提交的参数将在JSP 2中读取并存储到会话变量中,即sessionNamesessionNumber。请参阅以下代码:

<sql:query var="result" dataSource="${data}">
    SELECT NAME, NUMBER FROM DATA WHERE NAME = '${param.name}' OR NUMBER = '${param.number}'
</sql:query>
<c:set var="sessionName" value="${param.name}" scope="session"/>
<c:set var="sessionNumber" value="${param.number}" scope="session"/>

现在,在JSP 4中,可以读取这些会话变量。请参阅以下代码:

<sql:update var="updatevariable" dataSource="${data}">
    UPDATE DATA
    SET NAME = '${param.newname}'
    WHERE NAME = '${sessionName}'
</sql:update> 
<sql:update var="updatevariable2" dataSource="${data}">
    UPDATE DATA
    SET NUMBER = '${param.newnumber}'
    WHERE NUMBER = '${sessionNumber}'
</sql:update>

现在,如果您不再需要会话变量,可以使用<c:remove>删除它们。见下面的示例:

<c:remove var="sessionName" scope="session"/>
<c:remove var="sessionNumber" scope="session"/>

当您开始新的搜索时,可以将此代码放在JSP 1中。

只是一个评论: 将SQL代码直接执行到JSP代码中并不理想。您应该将其封装在Java类中 - 实现MVC模式。