我使用bean /表单处理在登录屏幕上获取输入参数,然后使用这些参数尝试将用户登录到应用程序中。
但是我遇到一个错误-
org.apache.jasper.JasperException:/loginbean.jsp(6,59)属性值request.getParameter(“ userName”)引用为“,在val中使用时必须转义
出现此错误的代码行是下面给出的代码块中的第二行-(即,名称为“ userName”的属性的代码行)
loginbean.jsp
<jsp:useBean id="db" scope="request" class="logbean.LoginBean" > <jsp:setProperty name="db" property="userName" value="<%=request.getParameter("userName")%>"/> <jsp:setProperty name="db" property="password" value="<%=request.getParameter("password")%>"/> </jsp:useBean>
LoginBean.java
package logbean; public class LoginBean { String userName=""; String password=""; public String getUserName() { return userName; } public void setUsername(String username) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
这里,
<jsp:setProperty name="db" property="userName" value="<%=request.getParameter("userName")%>"/> <jsp:setProperty name="db" property="password" value="<%=request.getParameter("password")%>"/>
您正在尝试混用 scriptlet 和taglib。这是无效的。使用一个或另一个。当userName包含像这样的双引号foo"bar时,JSP标记的值基本上将像结束value="foo"bar"。这在语法上是无效的。
userName
foo"bar
value="foo"bar"
由于 scriptlet 是一项过时的技术,因此我建议完全摆脱它。正确的方法是使用EL。在EL中,所有请求参数都可以Map<String,String>通过隐式变量用作${param}。利用它。
Map<String,String>
${param}
<jsp:setProperty name="db" property="userName" value="${param.userName}"/> <jsp:setProperty name="db" property="password" value="${param.password}"/>
另外,当所有参数名称与属性名称相同时,还可以让JSP自动设置所有属性,如下所示:
<jsp:setProperty name="db" property="*"/>