簡體   English   中英

如何從jsp頁面獲取ID到servlet?

[英]How to get id from jsp page to servlet?

我有一個在網站上注冊的用戶列表,當管理員單擊批准時,它必須獲取ID,然后將該行移至另一個名為login的表...現在的問題是jsp如何在servlet中獲取ID,因此可以將其傳遞給服務和DAO層的方法。

下面是我的jsp:

<tr bgcolor="white">
<td><b>id</b></td>
<td><b>FirstName</b></td>
<td><b>LastName</b></td>
<td><b>Gender</b></td>
<td><b>Category</b></td>
<td><b>DateOfBirth</b></td>
<td><b>Age</b></td>
<td><b>Address</b></td>
<td><b>Country</b></td>
<td><b>State</b></td>
<td><b>City</b></td>
<td><b>PinCode</b></td>
<td><b>EmailId</b></td>
<td><b>ContactNo</b></td>
<td><b>MobileNo</b></td>
</tr>


 <c:forEach items="${clients}" var="client">
 <tr>
            <td><c:out value="${client.id}"/></td>
            <td><c:out value="${client.firstName}"/></td>
            <td><c:out value="${client.lastName}"/></td>
            <td><c:out value="${client.gender}"/></td>
            <td><c:out value="${client.category}"/></td>
            <td><c:out value="${client.date}"/></td>
            <td><c:out value="${client.age}"/></td>
            <td><c:out value="${client.address}"/></td>
            <td><c:out value="${client.country}"/></td>
            <td><c:out value="${client.state}"/></td>
            <td><c:out value="${client.city}"/></td>
            <td><c:out value="${client.pinCode}"/></td>
            <td><c:out value="${client.emailId}"/></td>
            <td><c:out value="${client.contactNo}"/></td>
            <td><c:out value="${client.mobileNo}"/></td>
            <td><a href="ClientApproveServlet?id=${client.id}">APPROVE</a></td> // I have fetched the id here
            <td><a href="Reject.jsp">REJECT</a></td>
            <td><a href="OnHold.jsp">ONHOLD</a></td>

            </tr>
      </c:forEach>

堆棧跟蹤:

java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1
    at com.affiliate.DAO.ClientApproveDAO.insertClient(ClientApproveDAO.java:28)
    at com.affiliate.service.ClientApproveService.clientApprove(ClientApproveService.java:12)
    at com.affiliate.servlet.ClientApproveServlet.doGet(ClientApproveServlet.java:35)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2812)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1811)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1725)
    at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
    at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
    at com.affiliate.DAO.ClientApproveDAO.insertClient(ClientApproveDAO.java:23)
    ... 23 more

嘿,我解決了這樣更改我的DAO的問題:

public class ClientApproveDAO {

        private DataSource dataSource;
        public void setDataSource(DataSource dataSource) {
       this.dataSource = dataSource;
    }
    Connection conn=null;
    PreparedStatement statement=null;
    ResultSet rs=null;


    public void insertClient(int id) {    
        try{
            conn=dataSource.createConnection();
            PreparedStatement ps=conn.prepareStatement("insert into login(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

            ps.executeUpdate("insert into login(id,FirstName,LastName,Gender,Category,Dateofbirth,Age,Address,Country,State,city,PinCode,EmailId,ContactNo,MobileNo)select * from register where id="+id+"");
            ps.setInt(1, id);

        }
        catch (SQLException e) {
            throw new RuntimeException(e);

    } finally {
            if (rs != null) try { rs.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
    }


    }

}

謝謝大家提供的所有幫助,這是我的最終代碼,它的工作絕對正常且符合要求。

刪除${client.id}之間的{client.id}

<a href="ClientApproveServlet?id= $ {client.id}">
                                   ↑  

應該

<a href="ClientApproveServlet?id=${client.id}">

更新

這意味着我們克服了NumberFormat。 現在,insertClient()方法中出現錯誤。

我可以從異常中說出您的插入語句語法錯誤。

只需添加條件where id=? ,因為select * from register獲取所有記錄。

PreparedStatement ps=conn.prepareStatement("insert into login(id,FirstName,
     LastName,Gender,Category,Dateofbirth,Age,Address,Country,State,city,
     PinCode,EmailId,ContactNo,MobileNo)select * from register where id=?");
ps.setInt(1, id);

只需檢查您的SQL查詢。 我的觀點是您的欄數不匹配。 嘗試給像

select id,firstname... etc 

代替

select * from tablename 

我認為$ {client.id}中有一個空格,將其刪除即可。

 <a href="ClientApproveServlet?id= ${client.id}">

我認為您的查詢格式也不正確,請嘗試:

 String query ="insert into login(id,FirstName,LastName,Gender,Category,Dateofbirth,Age,"
 " Address,Country,State,city,PinCode,EmailId,ContactNo,MobileNo)"+
 " select id,..,..,.. FROM register; ";

您必須將插入代碼更改為:

insert into login (FirstName,LastName,Gender,Category,

                     Dateofbirth,Age,Address,Country,State,city,PinCode,

                     EmailId,ContactNo,MobileNo)values(?,?,?,?,?,?,?,?,?,?);

您應該像這樣檢查該用戶模型:

private int userid;
public int getUserid()
{
return userid;  
}
public void setUserid(int userid)
{
this.userid=userid; 
}

您應該為插入類型更改此類型:

public void addUser(User user)
    {
        try
        {
            PreparedStatement preparedStatement=connection.prepareStatement("insert into users (firstname,lastname,dob,email)values(?,?,?,?)");

            preparedStatement.setString(1, user.getFirstName());
            preparedStatement.setString(2, user.getLastName());
            preparedStatement.setDate(3, new java.sql.Date(user.getDob().getTime()));
            preparedStatement.setString(4, user.getEmail());
            preparedStatement.executeUpdate();
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }
    } 

好,你可以試試看

在執行此行之前

public void insertClient(int id) {    
        try{
            conn=dataSource.createConnection();
            PreparedStatement ps=conn.prepareStatement("insert into login(id,FirstName,LastName,Gender,Category,Dateofbirth,Age,Address,Country,State,city,PinCode,EmailId,ContactNo,MobileNo)select * from register");
            ps.setInt(1, id);
            ps.executeUpdate();
        }
        catch (SQLException e) {
            throw new RuntimeException(e);

將此添加到它

 String x=null;
 Resultset rs=conn.prepareStatement("select id from old_table where FirstName='request.getParameter('firstname')'and LastName='request.getParameter('lastname')'.......and so on.
while(rs.next){
x=rs.getString('id');
}

然后使用此x並將其傳遞到您的插入語句中。

如果只有一個或兩個值,則最簡單的方法是將它們放入會話或cookie中。

session.setAttribute("id",id);
cookie.setAttribute("name",name);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM