Как отобразить список записей базы данных (полученных через спящий режим) на страницу JSP в Struts 2?
я пытаюсь отобразить записи базы данных на моей странице JSP в Struts 2 с помощью Hibernate. Я успешно выполнил часть поиска.
но независимо от того, что я делаю, я не могу отобразить данные на странице JSP.
я пробовал различные решения, найденные в интернете. Но не могу понять, в чем проблема. Я вижу имя столбца таблиц, но в нем нет данных. У меня есть все необходимые геттеры и сеттеры в моем пользовательском POJO класс.
я приложил мой код:
Регистрация действий:
public class RegisterAction extends ActionSupport{
String name,pwd,email,address;
int phno;
public RegisterAction() {}
List<User> users = new ArrayList<User>();
UserDao udao = new UserDao();
//Getters and setters.
public String execute() throws Exception {
User u=new User();
u.setName(name);
u.setEmail(email);
u.setAddress(address);
u.setPhno(phno);
u.setPwd(pwd);
udao.addUser(u);
return "success";
}
public String listAllUsers(){
users = udao.getUsers();
System.out.println("In Action, "+users);
return "success";
}
}
UserDao
:
public class UserDao{
List<User> allUsers = new ArrayList<User>();
public UserDao() {}
//Getter and setter.
public Session getSession(){
return HibernateUtil.getSession();
}
public void closeSession(){
HibernateUtil.closeSession();
}
public void addUser(User u) {
Session session= getSession();
Transaction t = session.beginTransaction();
int i = (Integer)session.save(u);
t.commit();
closeSession();
}
public List<User> getUsers() {
Session session=getSession();
Transaction t = session.beginTransaction();
allUsers = (List<User>)session.createQuery("from User").list();
t.commit();
closeSession();
System.out.print(allUsers);
return allUsers;
}
}
User.java
//Класса Сущности:
@Entity
@Table(name="tbl_user")
public class User {
@Id
@GeneratedValue
@Column(name="user_id")
private int id;
@Column(name="user_phno")
int phno;
@Column(name="user_name")
private String name;
@Column(name="user_pwd")
private String pwd;
@Column(name="user_email")
private String email;
@Column(name="user_address")
private String address;
public User(){}
public User(String name,String pwd,String email,String address,int phno){
this.name = name;
this.pwd = pwd;
this.email = email;
this.address =address;
this.phno = phno;
}
//Getters and setters.
}
home.jsp
:
<table>
<tr>
<th>Name</th>
<th>Email</th>
<th>Address</th>
<th>Phone No</th>
</tr>
<s:iterator value="users">
<tr>
<td><s:property value="name"/></td>
<td><s:property value="email"/></td>
<td><s:property value="address"/></td>
<td><s:property value="phno"/></td>
</tr>
</s:iterator>
</table>
struts.xml
:
<action name="register" class="action.RegisterAction" method="execute">
<result name="success" type="redirect">listUsers</result>
</action>
<action name="listUsers" class="action.RegisterAction" method="listAllUsers">
<result name="success">/home.jsp</result>
</action>
HibernateUtil
:
public class HibernateUtil {
static SessionFactory sessionFactory;
static Session session;
public static Session getSession() {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
session= sessionFactory.openSession();
return session;
}
public void setSession(Session session) {
this.session = session;
}
public static void closeSession(){
session.close();
}
}
журнал сервера содержит
[models.User@9c0fad, models.User@1c94f2c, models.User@16d06ef]
INFO: In Action, [models.User@9c0fad, models.User@1c94f2c, models.User@16d06ef]
3 ответов
может быть, вы понимаете, но не знаете, почему вы не пытались его решить. Если вы хотите отобразить данные, сначала вы должны поместить их в базу данных. Проверьте наличие данных, подключившись к ним через клиентское приложение. Существует множество способов подключения к базе данных, включая клиентское приложение JDBC, поставляемое с IDE. Он также принимает свойства соединения прямо из вашего hibernate.cfg.xml
и имеет возможность проверить подключение. Кроме того, убедитесь, что учетные данные, используемые для подключения к база данных имеет права доступа DML/DDL к схеме, которая, вероятно, должна быть создана вручную.
этот файл предназначен для конфигурации hibernate, что вы должны обратить на него внимание, чтобы быть действительными из-за правильно DTD, соответствующий версии hibernate.
затем вы используете сопоставление на основе аннотаций, и оно также должно быть настроено в файле конфигурации.
далее, DAO не должен расширять HibernateUtil
и поставив static
свойство session
- Это катастрофа. Даос не должен был static
свойства. Если вы хотите получить сеанс использовать HibernateUtil.getSession()
и не забудьте закрыть сессию в конце сделки. Я думаю, вы все еще не реализовали то, что я предложил в предыдущий ответ, поэтому вы не знаете, как получить сеанс из потока. В любом случае открытие сеанса в конструкторе работает только при первом использовании сеанса, и он больше не доступен после его закрытия. Откройте сеанс в методе перед началом транзакции.
далее ModelDriven
лучше описывается @Quaternion, несколько слов о вашей модели: ваша модель используется только для просмотра user
и не содержит свойств для отображения users
.
и наконец, метод execute
является методом по умолчанию, используемым конфигурацией действий, вы не должны сопоставлять этот метод, если вы не знаете, что делаете.
Я обнаружил, что имя вашего свойства списка jsp и имя переменной класса действий должны совпадать. Как я понимаю, это должно решить вашу проблему.....!