我正在尝试使用表中的值填充下拉列表。该页面使用strust2和hibernate来访问数据库。
我可以查看注册页面(其中包含必须填充数据库值的下拉列表) 但下拉列表中没有显示任何值。
的index.jsp
<s:url id="url" action="registerAction">
</s:url>
<s:a href="%{url}">Register</s:a>
register.jsp
<s:form action="registerAction">
<s:select label="Select Date of Month" name="months" headerKey="0" headerValue="--Select--"
list="allMonths" listKey="id" listValue="name"/>
<s:submit value="Register"/>
</s:form>
struts.xml中
<action name="registerAction" class="action.RegisterAction" method="populateSelect">
<result name="none">register.jsp</result>
</action>
月份模型
@Entity
@Table(name="tbl_mnth")
public class Month {
@Id
@GeneratedValue
@Column(name="mnth_id")
private int id;
@Column(name="mnth_name")
private String name;
public Month(){}
public Month(String name) {
this.name=name;
}
public String getName() {
return name;
}
}
DAO
public class UserDao {
List<Month> allMonths = new ArrayList<Month>();
public List<Month> getAllMonths() {
return allMonths;
}
public void setAllMonths(List<Month> allMonths) {
this.allMonths = allMonths;
}
public Session getSession() {
return HibernateUtil.getSession();
}
public void closeSession() {
HibernateUtil.closeSession();
}
public UserDao() {
}
public List<Month> getMonths() {
Session session = getSession();
Transaction t = session.beginTransaction();
allMonths = (List<Month>) session.createQuery("FROM Month").list();
System.out.println("In constructor " + allMonths);
t.commit();
closeSession();
return allMonths;
}
}
行动类
public class RegisterAction extends ActionSupport {
List<Month> allMonths = new ArrayList<Month>();
String months;
UserDao udao = new UserDao();
public List<Month> getAllMonths() {
return allMonths;
}
public void setAllMonths(List<Month> allMonths) {
this.allMonths = allMonths;
}
public String getMonths() {
return months;
}
public void setMonths(String months) {
this.months = months;
}
public String populateSelect() {
allMonths = udao.getMonths();
System.out.println("In constructor " + allMonths);
return "none";
}
public RegisterAction() {}
}
数据库表格为tbl_mnth
,其中包含字段mnth_id
,mnth_name
。
我从中猜到的是动作类没有被实例化。我不知道它是如何或为何没有被实例化。
在服务器日志中显示
org.hibernate.hql.ast.QuerySyntaxException: Month is not mapped [from Month]
答案 0 :(得分:1)
Hibernate是一个ORM(Object-Relational- Mapping )框架,用于将POJO映射到数据库模式。在你的情况下它是Month
。并且因为您正在使用注释将对象映射到表,所以您应该在hibernate.cfg.xml
<mapping class="package.to.persistence.Month" />
没有映射类,Hibernate无法在对象中找到注释。
答案 1 :(得分:0)
尝试在DAO中执行此操作
public List<Month> getMonths() {
Session session = getSession();
Transaction t = session.beginTransaction();
allMonths = (List<Month>) session.createCriteria(Month.class).list();
System.out.println("In constructor " + allMonths);
t.commit();
closeSession();
return allMonths;
}
顺便说一句,它与你的动作类没有任何关系,因为异常显然是一个hibernate异常。尝试在操作类中设置断点(如果使用的是IDE),或者输入System.out.println语句以查看您的代码是否正在进入操作类。