views:

75

answers:

2

Hi i am trying to learn Java, Hibernate and the MVC pattern. Following various tutorial online i managed to map my database, i have created few Main methods to test it and it works. Furthermore i have created few pages using the MVC patter and i am able to display some mock data as well in a view. the problem is i can not connect the two. this is what i have

My view Looks like this

    <%@ 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>

My controller

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;
    }
}

My servelet definitions

<?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"&gt;

  <!-- 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>

and finally this class to access the database

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;
    }
}

the database connection occurs in this file

<?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"&gt;

    <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>

and UserServiceImplementation Class looks like this

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.");
    }
}

Could you help me to solve this problem i spent the last 4 days and nights on this issue without any success

Thanks

+1  A: 

After a week working on this problem day and night i managed to solve the issue. I am not sure if the solution i am proposing is the right one but it works and is good enough for me at this learning stage.

this is what i have done:

i modified the bean userServiceImplementation as follow

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

it now reference the userDao bean

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

the controller remain the same while the HibernateUserDao is changed as follow

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;
    }
}

I hope this will help you guys!!

GigaPr
A: 

Would've help some information about the error if you get any.

Something strikes me right away is your html - you have no form and no input fields? Perhaps you can start from there?

deian
Pssh, he already answered his own question.
BalusC