【发布时间】:2012-07-14 04:38:01
【问题描述】:
我有一个表单,其中有一个文本字段。用户在文本字段中输入电子邮件地址,当用户提交表单时,Action 类从Users 表中找到用户的uid,并将uid 在JSP 页面上显示为与<s:actionmessage/> 联系。我收到了IndexOutOfBoundsException。
我的 JSP 表单是:
<s:form action="okadddqs" method="post" cssClass="text">
<s:textfield label="Your Email address " name="email"/>
<s:submit value="Find Uid"/>
</s:form>
Action 类的代码是:
package com.rambo.action;
import beans.Users;
import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.hibernate.Session;
/**
*
* @author ROMO
*/
@ManagedBean
@SessionScoped
public class NewQuestion extends ActionSupport {
private String email;
private List<Users> ul = new ArrayList<Users>();
public List<Users> getUl() {
return ul;
}
public void setUl(List<Users> ul) {
this.ul = ul;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
/* i have used many where the getUid() and getEmail() even in the error and messages to find what the value it is getting on error. */
@Override
public String execute() throws Exception {
Session session = null;
int d;
try {
session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
try {
ul = (List<Users>) session.createQuery("from Users c where c.email = '" + getEmail() + "'");
if (!ul.isEmpty()) {
d = ul.get(0).getUid();
} else {
this.addActionError("Oops. Sorry. You are Not Allowed now. Please Try Again Later." + getEmail() + ","+ ul.get(0).getUid());
session.close();
return ERROR;
}
} catch (Exception e) {
this.addActionError("Oops. There was an error." + getEmail() + ","+ ul.get(0).getUid());
session.close();
return ERROR;
}
session.getTransaction().commit();
} catch (Exception e) {
this.addActionError("Oops. An Error Encountered...! Email address " + getEmail() + ","+ ul.get(0).getUid()+" not registered. Try with your new email address.");
session.close();
return ERROR;
}
this.addActionMessage("Your Uid is : " + ul.get(0).getUid());
return SUCCESS;
}
@Override
public void validate() {
if ( "".equals(getEmail()) || getEmail() == null ) {
this.addActionError("Email is Compulsory to input..!" + getCname());
} else if (getEmail().indexOf("@") < 0 || getEmail().indexOf(",") > 0 || getEmail().indexOf(".") < 0 || lastEmailFieldTwoCharsOrMore(getEmail()) == false) {
this.addActionError("Please Input a valid email address." + getCname());
}
}
}
当我删除所有 try catch 块时,我得到异常:
java.lang.ClassCastException: org.hibernate.impl.QueryImpl cannot be cast to java.util.List
我已经用 POJO 正确地完成了 bean 和表的映射。有人可以指出错误吗?我正在使用带有 Struts 的 Hibernate。
【问题讨论】:
-
请发布有关该异常的完整堆栈跟踪。
-
对不起,但事实上我没有在 glassfish 服务器日志上得到任何错误堆栈跟踪。但是,在浏览器上可以看到唯一的例外。
-
这是因为您使用
try...catch捕获了异常。暂时评论此try...catch,您将获得堆栈跟踪。这只是因为有人只有在查看堆栈跟踪后才能更好地猜测异常的确切原因。 -
是的,我现在也在做同样的事情。等一下,我放了堆栈跟踪。
-
哎呀,我又没有得到任何堆栈跟踪错误。但是现在异常改成了“java.lang.ClassCastException: org.hibernate.impl.QueryImpl cannot be cast to java.util.List”
标签: hibernate struts2 indexoutofboundsexception