Spring MVC: несколько тегов <a>в одной форме - PullRequest
1 голос
/ 05 февраля 2020

Я смотрел на разные решения, но они не работали для меня. Я хочу передать данные через мои теги. Но я думаю, что наличие нескольких тегов в форме не разрешено в Spring MVC. Я просмотрел несколько кнопок отправки, но они не передают мои данные правильно. Когда я использую кнопки отправки, они пропускают первый идентификатор строки вместо той, по которой щелкнули. Есть ли способ сделать это с тегами, если есть, я был бы очень признателен, если вы, ребята, можете помочь мне с этим.

Вот моя форма jsp:

   <form action="editOrDelete" method="get" id="disp">
            <table id="rehber" align="center"  >
                <thead>
                    <tr bgcolor="#333">
                        <th  style="width: 0%;"><font color="#fff">ID</font></th>
                        <th  style="width: 0%;"><font color="#fff">NAME</font></th>
                        <th  style="width: 0%;"><font color="#fff">EMAIL</font></th>
                        <th  style="width: 100%;"><font color="#fff">ACTION</font></th>    
                    </tr>
                </thead>
                <TBody>
                    <c:forEach items="${data}" var="list">
                    <tr>
                        <td><input readonly name="id" id="id" value="<c:out value="${list.id}"/>"></td>
                        <td><input readonly name="name" id="name" value="<c:out value="${list.name}"/>"></td>
                        <td><input readonly name="email" id="email" value="<c:out value="${list.email}"/>"></td>
                        <td>

                            <a href="editOrDelete/edit/${list.id}" style="text-decoration: none; background:#333;" class="edit"   >Edit</a>
                            <a href="editOrDelete/delete/${list.id}" style="text-decoration: none; background: rgb(163, 2, 2);" class="edit"   >Delete</a>

                        </td>
                    </tr>
                    </c:forEach>
                </TBody>
            </table>
        </form> 

Мой контроллер:

@RequestMapping(value="/editOrDelete/delete/{id}" )
    public String deleteData(HttpServletRequest request, HttpServletResponse response, @PathVariable(value="id") String id) {
        //get the id of the chosen input

        String path="";

        try{
            //String id= request.getParameter("hiddenDelete");
            String idStr = id;

            //connect to database
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3308/idk?autoReconnect=true&useSSL=false", "root", "");
            Statement stat=(Statement) conn.createStatement();

            //delete the given id from the database
            String sql= "DELETE FROM smth WHERE id='" +idStr + "'" ;
            stat.executeUpdate(sql);
            path = displayTable(request, response);
        }catch(Exception e) {}
        return path;

    }
@RequestMapping(value="/editOrDelete/edit/{id}" )
    public String fillTheTextBoxes(HttpServletRequest request, HttpServletResponse response,@PathVariable(value="id") String id) {
        String path="";
        try{
            //get the id from the url
            //String id= request.getParameter("hiddenEdit");
            String idStr =id;


            //set a variable for editServlet
            request.getSession().setAttribute("editId", idStr);

            //connect to database
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3308/idk?autoReconnect=true&useSSL=false", "root", "");

            //get the chosen id's attributes
            Statement stat=(Statement) conn.createStatement();
            String sql= "SELECT * FROM smth WHERE id='" +idStr + "'" ;
            ResultSet rs = stat.executeQuery(sql);
            String nameTextBox="";
            String emailTextBox="";
            while(rs.next()) {
                nameTextBox= rs.getString("name");
                emailTextBox= rs.getString("email");

            }

            //fill in the input box
            request.getSession().setAttribute("nameText", nameTextBox);
            request.getSession().setAttribute("emailText", emailTextBox);
            path = displayTable(request, response);
        }catch(Exception e) {}
        return path;

    }

1 Ответ

2 голосов
/ 05 февраля 2020

Вы можете сделать это через форму. Это обходной путь, но он будет работать. Просто создайте две формы внутри вашей для каждого l oop, а не создавайте одну сверху. Внутри для каждого l oop просто поместите форму для редактирования и еще одну для удаления.

<form action="editOrDelete/edit/${list.id}"  method="get">
<input type="submit" value="Delete">
</form>

<form action="editOrDelete/delete/${list.id}" method="get">
    <input type="submit" value="Edit">
</form>

Просто поместите эти формы внутри себя для каждого l oop, а не для одного используемого вами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...