该部分代码已完成,欢迎参考
https://github.com/heibai23/MicroMessage
OGNL表达式
【知识点1】
<a href="">属于GET方式请求,参数通过在路径中传递(可以通过js进行提交,并进行提示,如下图)。
【知识点2】
使用<a>标签提交form表单信息,使用js修改提交的action,如下图
在表单中定义hidden存储要删除id的值
<input type="hidden" id="hiddenId" name="id" value=""/>
在js文件中定义函数
function deleteOne(basePath,id){
$("#hiddenId").val(id);
$("#mainForm").attr("action",basePath + "deleteServlet");
$("#mainForm").submit();
}
由于request.getRequestDispatcher().forward(req,resp);是一次请求,转发后请求对象会保存,因此在ListServlet中仍能得到command和description的值
删除和更新操作需要手动提交事务
sqlSession.commit();
<td> <a href="#">修改</a> <a href="javascript:judgeDelete('<%=basePath%>', ${message.id}, '${command}', '${description}');">删除</a> <input type="hidden" id="hiddenId" name="id" /> <input type="hidden" id="hiddenCommand" name="command" /> <input type="hidden" id="hiddenDescription" name="description" /> </td>
先把jsp内容修改成这样,然后在Body结尾处引入js文件
<script type="text/javascript" src="<%=basePath%>resources/js/jquery-1.8.0.min.js"></script> <script type="text/javascript" src="<%=basePath%>resources/js/deleteOne.js"></script> </body>
下面是deleteOne.js的代码:
function judgeDelete(basePath,id,command,description){ if(confirm("确定要删除吗?")) { $("#hiddenId").val(id); $("#hiddenCommand").val(command); $("#hiddenDescription").val(description); $("#mainForm").attr("action", basePath + "DeleteOneServlet.action"); $("#mainForm").submit(); } }
解释:
原本老师是通过<a>发出get请求(附带参数id) --> DeleteOneServlet.action
然后DeleteOneServlet请求转发到List.action,此时command和description参数为空
-----------
改:单击<a>,利用Js通过<form>发出post请求 --> DeleteOneServlet.action
在这个post请求前,偷偷利用Js给几个hidden的input设置值,让它们跟着post一起过去
接着,DeleteOneServlet再请求转发到List.action,command和description就不会为空了
servlet负责接收页面的值和向页面传值。如果有业务逻辑需要处理则调用相应的service。service接收servlet传过来的值,并对其进行处理,做业务的操作,算法等等,如果有需要则调用相应的dao层。dao层完成与数据库的交互,执行相应的SQL语句。 增删改默认按事务处理,Mybatis对事务的控制,默认 是不自动提交的,需要手动提交 sqlSession.commit(); <script type="text/javascript" charset="utf-8" > //获得动态URL function getUrl(url){ //获得查询指令名称的值 var command = document.getElementById("command").value; //获得查询描述的值 var description = document.getElementById("description").value; //拼接最后的URL地址 var changeUrl = url + "&command=" + command + "&description=" + description; //跳转页面 window.location.href=changeUrl; } </script> 单条删除:<a>用post传值,并弹出确认框 <script type="text/javascript"> function judgeDelete(id) { if(confirm("确定要删除吗?")) { window.location.href="DeleteOneServlet.action?id="+id; } } </script> <a href="javascript:judgeDelete(${message.id})">删除</a>
web.xml 配置servlet
<servlet>
<servlet-name>名称</servlet-name>
<servlet-class>包名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>名称同上</servlet-name>
<url-pattern>/名称.action<url-pattern>
</servlet-mapping>
web.xml
<form action="<%=basePath %>Delete.action" method="post" id="messageTo" style="visibility: hidden">
<input id="messageId" name="messageId"/>
<input id="messageCommand" name="command"/>
<input id="messageDescription" name="description"/>
</form>
<script src="<%=basePath%>resources/js/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
function doPost(id) {
var command = $("input[name='command']").val();//指令名称
var description = $("input[name='description']").val();//描述
$("#messageId").val(id);
$("#messageCommand").val(command);
$("#messageDescription").val(description);
$("#messageTo").submit();
}
</script>
完全根据老师思路书写的! 以下是逻辑代码
dao层
public void deleteMessageById(Integer id) {
SqlSession sqlSession = MybatisUtil.getSqlSession();
sqlSession.getMapper(MessageDao.class)
.deleteMessageById(id);
sqlSession.commit();
MybatisUtil.closeSqlSession(sqlSession);
}
xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bdqn.dao.MessageDao">
<resultMap type="Message" id="messageList">
<id column="ID" property="id"/>
<result column="COMMAND" property="command"/>
<result column="DESCRIPTION" property="description"/>
<result column="DESCRIPTION" property="description"/>
<result column="CONTENT" property="content"/>
</resultMap>
<select id="queryMessageList" resultMap="messageList" parameterType="Message">
SELECT * FROM `message` where 1=1
<if test="null!=command and !''.equals(command.trim())">and command = #{command}</if>
<if test="null!=description and !''.equals(description)">and description like '%' #{description} '%'</if>
</select>
<delete id="deleteMessageById" parameterType="int">
DELETE FROM `message` WHERE ID = #{_parameter}
</delete>
</mapper>
Servlet
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
//从表单取值
String id = req.getParameter("messageId");
//调用删除方法
MessageService messageService = new MessageServiceImpl();
messageService.deleteMessageById(id);
req.getRequestDispatcher("/List.action").forward(req, resp);
}
Mybatis中的OGNL表达式