在我们创建一个jsp页面后,如果我们需要一进jsp就跳到servlet层从数据库拿到数据并返回jsp通过EL表达式拿到数据该怎么办呢。
给大家看看我一步一步坑过来的方法:
通过C标签拿到当前页面的路径:
<c:set value="${pageContext.request.contextPath }" scope="page" var="ctx"></c:set>
创建的一个:login.jsp页面:
<div class="row">
<label for="UserName">操作员代码:</label>
<div class="col-3">
<select id="OperationID" name="OperationID" class="form-control select2 ">
<c:forEach items="${OperationMans}" var="Operationman">
<option value="${Operationman.operationId}">${Operationman.operationNumber}</option>
</c:forEach>
</select>
</div>
<div class="col-2" style="color:#000000;">备注:</div>
<div class="col-3"><input type="text" class="form-control" name="Remark" id="Remark" value="${OperationMans[0].remark}" style="background:#c2c2c2;font-size:14px" readonly /></div>
</div>
创建的servlet层:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");//设置编码格式
List<SOperationMan> OperationMan=isOperationMan.findAll();//查询到的数据
req.setAttribute("OperationMans", OperationMan);//存放
req.getRequestDispatcher("/jsp/login.jsp").forward(req, resp);//共享数据
}
在这里可以看到,我们已经查询到了需要的数据,并且共享数据到了login.jsp,然后我们需要一进入login.jsp页面时就跳到这个servlet层拿到数据并返回jsp页面;
首先,如果你在jsp页面写onload事件(加载事件)一来就进行跳转到servlet,比如:
<body id="body" οnlοad=”load()”>
function load() {
$.get(“${ctx}/servlet/LoginServlet”);
}
这样的话虽然是会跳到servlet层,但他会进行一个无限循环的跳转,因为它一加载就跳到servlet,然后servlet那边又跳回jsp,一直循环,所以这样还不行,那应该怎么办呢?
其实很简单,给那个需要用EL表达式获取到的值进行一个判断,如果他为空时,就跳转到servlet,如果不为空,那就不进行跳转,代码如下:
$(function () {
var OperationID = $("#OperationID").val();//需要用EL表达式获取到的值
if (OperationID == null) {
window.location.href = "${ctx}/servlet/LoginServlet";
}
});