JSP页面中Java代码和JS代码初始化问题

众所周知,JSP页面中是可以直接写原生Java代码的,只是需要把Java代码放到<%%>中。当JSP页面加载的时候,<%%>中的代码就会初始化,而不会等你调用的时候执行。

这样就有一个问题,比如我想实现一个功能:

当用户点击页面上某个按钮的时候,记录用户的操作日志到数据库中。

代码:

<input name="showRealPasswd" type="button" value="查看" class="btn_g" onclick="showRealPasswd()">
	function showRealPasswd() {
		var value = document.getElementById("compw_span").innerHTML;
		if ("******" == value) {
			document.getElementById("compw_span").innerHTML = "<%=x_com_passwd%>"
			// 调用LogItemHBLT.java类中的writeItemLogHBLT()方法
			<%=LogItemHBLT.getInstance().writeItemLogHBLT(request, 1, "WEB", content, "成功") %>
		}
	}
public int writeItemLogHBLT(HttpServletRequest request, int type, String device, String content, String result) {
        HttpSession session = request.getSession();
        UserRes curUser = (UserRes) session.getAttribute("curUser");
        User user = curUser.getUser();
		// do something
		……
}

这样写大家能看出来有啥问题嘛?我们打开页面按F12看下这个JSP的源代码:发现了吗?源代码中并没有这一行代码:<%=LogItemHBLT.getInstance().writeItemLogHBLT(request, 1, "WEB", content, "成功") %>

而是直接初始化成了writeItemLogHBLT()方法的返回值:1,

所以当你点击“查看”按钮的时候,JS代码中的showRealPasswd()方法并不会去调Java类中的writeItemLogHBLT()方法,因为这个方法变成了常量1。

怎么解决这个问题呢?

可以新建一个JSP页面,Java代码的调用写在这个JSP中,然后在原来的JSP页面中调用这个页面。这样就将Java代码的执行“延迟”到子JSP页面了。

具体操作:

第一步:

新建一个JSP页面

<%@ page contentType="text/html;charset=GBK"%>

<%@page import="com.linkage.litms.system.dbimpl.LogItemHBLT"%>
<%@ page import="cn.hutool.json.JSONObject" %>

<%
	request.setCharacterEncoding("GBK");
	String device_serialnumber = request.getParameter("device_serialnumber");
	String city_id = request.getParameter("city_id");

	JSONObject operationContent = new JSONObject();
	operationContent.set("device_serialnumber", device_serialnumber);
	operationContent.set("city_id", city_id);
	String content = operationContent.toString();

	LogItemHBLT.getInstance().writeItemLogHBLT(request, 1, "WEB", content, "success");

%>

第二步:在原页面中调用新建的JSP

此时再来看下F12中的源代码:

此时再点击查看按钮就会去加载DeviceShowLogHBLT.jsp

另外注意一个问题:

如果Java类中的方法没有返回值,要使用<%><%>,而不是<%=><%>

猜你喜欢

转载自blog.csdn.net/wangxy_job/article/details/138505791