2010-05-28 7 views
3

J'essaie d'apprendre Java, Hibernate et le modèle MVC. Suite à divers tutoriel en ligne j'ai réussi à mapper ma base de données, j'ai créé quelques méthodes principales pour le tester et cela fonctionne. En outre, j'ai créé quelques pages en utilisant le modèle MVC et je suis capable d'afficher certaines données fausses ainsi dans une vue. le problème est que je ne peux pas connecter les deux. ce que j'aiJava Mvc Et Hibernate

Mon opinion se présente comme suit

<%@ include file="/WEB-INF/jsp/include.jsp" %> 
<html> 
    <head> 
     <title>Users</title> 
     <%@ include file="/WEB-INF/jsp/head.jsp" %> 
    </head> 
    <body> 
     <%@ include file="/WEB-INF/jsp/header.jsp" %> 
     <img src="images/rss.png" alt="Rss Feed"/>  
     <%@ include file="/WEB-INF/jsp/menu.jsp" %>  
     <div class="ContainerIntroText"> 
     <img src="images/usersList.png" class="marginL150px" alt="Add New User"/> 
     <br/> 
     <br/> 
     <div class="usersList"> 
      <div class="listHeaders"> 
       <div class="headerBox"> 
        <strong>FirstName</strong> 
       </div> 
       <div class="headerBox"> 
        <strong>LastName</strong> 
       </div> 
       <div class="headerBox"> 
        <strong>Username</strong> 
       </div> 
       <div class="headerAction"> 
        <strong>Edit</strong> 
       </div> 
       <div class="headerAction"> 
        <strong>Delete</strong> 
       </div> 
      </div> 
      <br><br> 
     <c:forEach items="${users}" var="user"> 
      <div class="listElement"> 
       <c:out value="${user.firstName}"/> 
      </div> 
      <div class="listElement"> 
       <c:out value="${user.lastName}"/> 
      </div> 
      <div class="listElement"> 
       <c:out value="${user.username}"/> 
      </div> 
      <div class="listElementAction"> 
       <input type="button" name="Edit" title="Edit" value="Edit"/> 
      </div> 
      <div class="listElementAction"> 
       <input type="image" src="images/delete.png" name="image" alt="Delete" > 
      </div> 
      <br />    
      </c:forEach> 
     </div> 
     </div> 

     <a id="addUser" href="addUser.htm" title="Click to add a new user">&nbsp;</a> 
    </body> 
</html> 

Mon contrôleur

public class UsersController implements Controller { 

    private UserServiceImplementation userServiceImplementation; 

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException {   

     ModelAndView modelAndView = new ModelAndView("users");   

     List<User> users = this.userServiceImplementation.get(); 
     modelAndView.addObject("users", users); 

    return modelAndView; 

    } 
    public UserServiceImplementation getUserServiceImplementation() { 
     return userServiceImplementation; 
    } 

    public void setUserServiceImplementation(UserServiceImplementation userServiceImplementation) { 
     this.userServiceImplementation = userServiceImplementation; 
    } 
} 

Mes définitions servelet

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <!-- the application context definition for the springapp DispatcherServlet --> 

    <bean name="/home.htm" class="com.rssFeed.mvc.HomeController"/> 
    <bean name="/rssFeeds.htm" class="com.rssFeed.mvc.RssFeedsController"/> 
    <bean name="/addUser.htm" class="com.rssFeed.mvc.AddUserController"/> 
    <bean name="/users.htm" class="com.rssFeed.mvc.UsersController"> 
     <property name="userServiceImplementation" ref="userServiceImplementation"/> 
    </bean> 

    <bean id="userServiceImplementation" class="com.rssFeed.ServiceImplementation.UserServiceImplementation"> 
     <property name="users"> 
      <list> 
       <ref bean="user1"/> 
       <ref bean="user2"/> 
      </list> 
     </property> 
    </bean> 

    <bean id="user1" class="com.rssFeed.domain.User"> 
     <property name="firstName" value="firstName1"/> 
     <property name="lastName" value="lastName1"/> 
     <property name="username" value="username1"/> 
     <property name="password" value="password1"/> 
    </bean> 

    <bean id="user2" class="com.rssFeed.domain.User"> 
     <property name="firstName" value="firstName2"/> 
     <property name="lastName" value="lastName2"/> 
     <property name="username" value="username2"/> 
     <property name="password" value="password2"/> 
    </bean> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> 
     <property name="prefix" value="/WEB-INF/jsp/"></property> 
     <property name="suffix" value=".jsp"></property> 
    </bean> 

</beans> 

et enfin cette classe pour accéder à la base de données

public class HibernateUserDao extends HibernateDaoSupport implements UserDao { 

    public void addUser(User user) { 
     getHibernateTemplate().saveOrUpdate(user); 
    } 

    public List<User> get() { 

     User user1 = new User(); 
     user1.setFirstName("FirstName"); 
     user1.setLastName("LastName"); 
     user1.setUsername("Username"); 
     user1.setPassword("Password"); 

     List<User> users = new LinkedList<User>(); 
     users.add(user1); 
    return users; 
    } 

    public User get(int id) { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

    public User get(String username) { 
     return null; 
    } 
} 

la connexion de base de données se produit dans ce fichier

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> 
     <property name="url" value="jdbc:hsqldb:hsql://localhost/rss"/> 
     <property name="username" value="sa"/> 
     <property name="password" value=""/> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" > 
     <property name="dataSource" ref="dataSource" /> 
     <property name="mappingResources"> 
      <list> 
       <value>com/rssFeed/domain/User.hbm.xml</value> 
      </list> 
     </property> 
     <property name="hibernateProperties" > 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

    <bean id="userDao" class="com.rssFeed.dao.hibernate.HibernateUserDao"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean>  

</beans> 

et UserServiceImplementation classe ressemble à ce

public class UserServiceImplementation implements UserService { 

    private UserDao userDao; 

    public void setUserDao(UserDao userDao) { 
     this.userDao = userDao; 
    } 

    public void add(User user) throws UserAlreadyExistsException { 

     if (userDao.get(user.getUsername()) != null) { //user already exists 
      throw new UserAlreadyExistsException(); 
     } 
     else{ 
      userDao.addUser(user); 
     } 
    } 

    private static List<User> users; 


    static { 
     User user1 = new User(); 
     user1.setFirstName("FirstName"); 
       user1.setLastName("LastName"); 
       user1.setUsername("my username"); 
       user1.setPassword("my Password"); 

     users = new LinkedList<User>(); 
     users.add(user1); 
    } 

    public User createUser(User u) { 
    User user = new User(); 
    user.setId(users.size() + 1); 
    user.setFirstName(u.getFirstName()); 
     user.setLastName(u.getLastName()); 
     user.setUsername(u.getUsername()); 
     user.setPassword(u.getPassword()); 
     users.add(user); 
    return user; 
    } 

    public List<User> get() { 
     return users; 
    } 

    public void setUsers(List<User> users) { 
     this.users = users; 
    } 

    public User get(int id) { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 

Pourriez-vous me aider à résoudre ce problème j'ai passé les 4 derniers jours et des nuits sur cette question sans succès

Merci

+0

Qu'est-ce qui ne fonctionne pas? et pouvez-vous nous montrer le code pour UserServiceImplementation? – oedo

+0

désolé je l'ai oublié, je veux remplacer les données fausses définies dans le fichier de définition servelet avec des données de la base de données – GigaPr

+0

@GigaPr poster la bonne réponse afin que quelqu'un d'autre pourrait résoudre son problème avec ce problème – ant

Répondre

1

Après une semaine de travail sur ce problème jour et nuit, j'ai réussi à résoudre le problème. Je ne suis pas sûr si la solution que je propose est la bonne, mais cela fonctionne et est assez bon pour moi à ce stade d'apprentissage.

ce que je l'ai fait:

i modifié le userServiceImplementation de haricots comme suivre

<bean id="userServiceImplementation" class="com.rssFeed.ServiceImplementation.UserServiceImplementation"> 
     <property name="userDao" ref="userDao" /> 
    </bean> 

il référence maintenant la fève userDao

<bean id="userDao" class="com.rssFeed.dao.hibernate.HibernateUserDao"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean>  

le contrôleur restent les mêmes alors que le HibernateUserDao est modifié comme suit

public class HibernateUserDao extends HibernateDaoSupport implements UserDao { 

    private static final String User = User.class.getName(); 

    public void addUser(User user) { 
     getHibernateTemplate().saveOrUpdate(user); 
    } 

    public void save(User user){ 
     getHibernateTemplate().saveOrUpdate(user); 
    } 

    public List<User> get() { 

     return getHibernateTemplate().find("from " + User); 
    } 

    public User get(int id) { 
     return (User) (getHibernateTemplate().find("from " + User + " where id = " + id).get(0)); 
    } 

    public User get(String username) { 
     return null; 
    } 
} 

J'espère que cela vous aidera les gars !!

0

Vous auriez aidé quelques informations sur l'erreur si vous en avez. Quelque chose me frappe tout de suite est votre code HTML - vous n'avez pas de formulaire et pas de champs de saisie? Peut-être que vous pouvez commencer à partir de là?

+0

Pssh, il a déjà répondu à sa propre question . – BalusC

Questions connexes