【发布时间】:2015-04-29 18:28:55
【问题描述】:
我尝试运行下面的代码但有错误。
<body>
<%
String uname = request.getParameter("name");
String pwd = request.getParameter("password");
Session s = new AnnotationConfiguration().configure() .buildSessionFactory().openSession();
Transaction t = s.beginTransaction();
Query q = s.createQuery("from pack1.Login as l where l.name = :n and l.password = :pwd");
q.setParameter("n", uname);
q.setParameter("pwd", pwd);
List<Login> records = q.list();
if (records.size() > 0) {
request.setAttribute("loginstatus", "Login Successful.");
HttpSession session1 = request.getSession();
session1.setAttribute("username", uname);
getServletContext().getRequestDispatcher("/profile.jsp").forward(request, response);
} else {
request.setAttribute("loginstatus", "Username/Password do not match.");
getServletContext().getRequestDispatcher("/SignIn.html").forward(request, response);
}
out.close();
%>
</body>
文件Login.java
public class Login extends ActionSupport implements SessionAware {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
SessionMap<String, String> hm;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private String name;
private String email;
private Long mobile;
private String password;
public Long getMobile() {
return mobile;
}
public void setMobile(Long mobile) {
this.mobile = mobile;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute(){
return "success";
}
@Override
public void setSession(Map<String, Object> map) {
hm = (SessionMap) map;
}
public String logout(){
hm.invalidate();
return "success";
}
}
堆栈跟踪:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:428)
root cause
org.hibernate.QueryParameterException: could not locate named parameter [n]
org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:148)
org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:165)
org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:523)
org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:493)
org.apache.jsp.Login_jsp._jspService(Login_jsp.java:118)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:428)
【问题讨论】:
-
Action是后缀。你应该把这个类命名为LoginAction。