在最近的写项目过程中遇到了很多问题,这里来整理一下
PropertyNotFoundException: 类型XXX上找不到属性XXX的解决方案
之前遇到了这样的问题,它的报错提示是这样的:
javax.el.PropertyNotFoundException: 类型[java.lang.String]上找不到属性[menuid2]
在网上搜到了很多问题解答的方案:
- 检查java类中属性名有没打错。
- 在页面用el表示时,应该将第一个字母改为小写。
- 检查自己的代码写的是否规范
- 命名冲突
这些只适用于下图所示的场景:
而我这个问题的原因是因为最后的页面是一个组合的页面,我传递Menu这个菜单对象时使用的是request传递,导致它接收不到数据,所以认为Menu对象是String类型
下面是传递过去的页面,而我调用Menu对象的页面是left.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!doctype html public "-//w3c//dtd xhtml 1.0 frameset//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-frameset.dtd">
<html>
<head>
<meta http-equiv=content-type content="text/html; charset=utf-8" />
<meta http-equiv=pragma content=no-cache />
<meta http-equiv=cache-control content=no-cache />
<meta http-equiv=expires content=-1000 />
<title></title>
</head>
<frameset border=0 framespacing=0 rows="60, *" frameborder=0>
<frame name=head src="head.jsp" frameborder=0 noresize scrolling=no>
<frameset cols="170, *">
<frame name=left src="left.jsp" frameborder=0 noresize />
<frame name=right src="right.jsp" frameborder=0 noresize scrolling=yes />
</frameset>
</frameset>
<noframes>
</noframes>
</html>
最终使用session传递数据就好了
错误代码400
错误代码400指的是语法问题
在第一个问题发生之后,我突发奇想,在
<frame name=right src="right.jsp" frameborder=0 noresize scrolling=yes />
这行代码的.jsp后面使用?赋值就会出现现在这个错误情况。解决的办法和之前一样,使用session传值就好了
如果在servlet中使用重定向也在后面使用?赋值的话也会出现这个报错页面
$.post只能进入默认页面
在制作登录界面的时候,应该先判断用户名和密码是否正确,之后跳转到对应的界面,由于对前端知识的不熟悉,我使用了ajax的方法
前端代码:
<script type="text/javascript">
$(function cc() {
$("#checkcheck").click(function () {
var TxtUserName = document.getElementById("TxtUserName1").value;
var TxtPassword = document.getElementById("TxtPassword1").value;
console.log("click执行");
location.href = "/login?TxtUserName=" + TxtUserName + "&TxtPassword=" + TxtPassword;
/*$.post("/login",{ TxtUserName: TxtUserName, TxtPassword: TxtPassword},function (result) {
alert(result);
//rs1.innerText = result;
})*/
})
})
</script>
后端页面:
for (Users user:list) {
if(Objects.equals(user.getLoginName(),username) && Objects.equals(user.getPassword(),code)){
System.out.println("user.getLoginName() = " + user.getLoginName() + " username = " + username + " user.getPassword() = " + user.getPassword() + " code = " + code);
req.setAttribute("user",user);
//req.setAttribute("roleid",user.getRoleId());
flag = true;
//writer.print("<script>alert('登录成功');location.href='/menu'</script>");
req.getRequestDispatcher("/menu").forward(req,resp);
writer.print("登录成功");
//resp.sendRedirect("/login");
//?user=" + user
}
}
if (!flag){
//writer.print("<script>alert('登录失败');location.href='/login.jsp?TxtUserName="+username+"'</script>");
writer.print("登录失败");
//resp.sendRedirect("/login");
req.getRequestDispatcher("/login.jsp").forward(req,resp);
}
可以通过我注释的内容看到之前使用ajax的痕迹
之后我了解到ajax是不可能在服务端完成跳转的,他只能返回文本信息。
Unescaped xml character问题
在赋值的时候出现了这个错误,在网上找到了解决的办法
- 通过ctrl + alt + s 调出setting界面
- 找到Editor对应的inspections选项
- 在HTML下的Accessibility找到Malformed content of < script> tag把勾去掉就可以解决了