如何在NetUI Repeater生成的锚点中传递ID调用删除方法?
解决NetUI Repeater中传递ID到删除控制器方法的问题
你现在的核心问题是没法把每条数据的ID传递到delete_bot方法里——之前用tagId只是给HTML锚点加了个元素ID,并不会把值传到后台。下面给你两种简单可行的方案,结合你的技术栈来调整:
方案1:通过请求参数传递ID(最直接)
第一步:修改JSP中的锚点标签
把原来的<netui:anchor>改成带参数的形式,用<netui:parameter>来绑定当前条目的ID:
<td> <netui:anchor value="Delete Bot" action="delete_bot"> <netui:parameter name="botId" value="${container.item.id}"/> </netui:anchor> </td>
这样点击锚点时,会把botId作为请求参数发送到后台。
第二步:在控制器方法中接收参数
修改你的delete_bot方法,通过HttpServletRequest获取这个参数:
import javax.servlet.http.HttpServletRequest; public Forward delete_bot(AnswerForm form, HttpServletRequest request){ // 获取传递的ID参数,注意处理空值和类型转换 String botIdStr = request.getParameter("botId"); if(botIdStr == null || botIdStr.isEmpty()){ // 可以在这里添加参数为空的处理逻辑,比如返回错误页面 return new Forward("home"); } int id = 0; try { id = Integer.parseInt(botIdStr); ma.deleteAnswerBot(id); } catch (NumberFormatException e) { e.printStackTrace(); // 处理ID格式错误的情况 } catch (SQLException e) { e.printStackTrace(); } return new Forward("home"); }
方案2:通过表单对象绑定ID(更符合NetUI的MVC思路)
如果你的AnswerForm类可以扩展,可以把ID绑定到表单对象上:
第一步:扩展AnswerForm类
在AnswerForm里添加botId字段和对应的getter/setter:
public class AnswerForm { // 原有字段... private Integer botId; public Integer getBotId() { return botId; } public void setBotId(Integer botId) { this.botId = botId; } }
第二步:修改JSP锚点
和方案1一样,用<netui:parameter>传递参数,NetUI会自动把参数绑定到表单对象的对应字段:
<td> <netui:anchor value="Delete Bot" action="delete_bot"> <netui:parameter name="botId" value="${container.item.id}"/> </netui:anchor> </td>
第三步:修改控制器方法
直接从表单对象中获取ID即可:
public Forward delete_bot(AnswerForm form){ Integer id = form.getBotId(); if(id != null){ try { ma.deleteAnswerBot(id); } catch (SQLException e) { e.printStackTrace(); } } return new Forward("home"); }
额外建议:用POST请求处理删除操作
用GET请求做删除有安全风险(比如误触发、被爬虫抓取),建议改成POST提交。可以把锚点换成内嵌的表单和按钮,样式做成锚点的样子:
<td> <netui:form action="delete_bot" style="display: inline; margin: 0;"> <netui:parameter name="botId" value="${container.item.id}"/> <netui:button value="Delete Bot" type="submit" style="border: none; background: none; color: blue; text-decoration: underline; cursor: pointer;"/> </netui:form> </td>
这样按钮看起来和锚点一样,但实际是用POST提交请求,更安全规范。
内容的提问来源于stack exchange,提问作者Hrishikesh Thakkar
相关产品推荐
相关产品推荐

