2010-05-28 3 views
3

Java, Hibernate 및 MVC 패턴을 배우려고합니다. 다양한 튜토리얼 온라인 따라 데이터베이스를 매핑 할 관리, 나는 몇 가지 주요 방법을 테스트하고 작동합니다. 또한 MVC 패턴을 사용하여 몇 페이지를 만들었고 일부 모의 데이터를 뷰에 표시 할 수 있습니다. 문제는 두 가지를 연결할 수 없다는 것입니다. 이것은 내가Java MVC 및 최대 절전 모드

내보기가 데이터베이스에 액세스하기 위해이

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

내 컨트롤러처럼

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

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

그리고 마지막으로이 클래스를 보이는이 무엇

,246,

데이터베이스 연결이 파일

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

에서 발생 UserServiceImplementation 클래스

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

당신은 내가이 문제에 대한 마지막 4 일 밤낮 동안이 문제를 해결하는 데 도움이 수 다음과 같습니다 어떤 성공없이

감사

+0

무엇이 작동하지 않습니까? UserServiceImplementation 코드를 표시 할 수 있습니까? – oedo

+0

죄송합니다. 죄송합니다. 서브렛 정의 파일에 정의 된 모의 데이터를 데이터베이스의 데이터로 바 꾸고 싶습니다. – GigaPr

+0

@GigaPr이 정답을 게시하면 다른 사람이이 문제로 문제를 해결할 수 있습니다. – ant

답변

1

주간이 문제를 해결하기 위해 밤낮으로 문제를 해결할 수있었습니다. 내가 제안하는 해답이 맞는지는 잘 모르겠지만이 학습 단계에서 나에게 도움이된다.

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

을 따를

내가 빈 userServiceImplementation 수정은 이제 userDao 빈을 참조

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

컨트롤러가 HibernateUserDao 동안 동일하게 유지 :

내가 한 일이다 다음과 같이 변경됩니다.

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

나는 이것이 너희들을 도울 것이라는 희망을 품는다!

0

오류가 발생하는 경우 오류에 대한 정보를 얻을 수 있습니까?

뭔가 나에게 즉시 영향을 미칩니다. 양식과 입력란이 없습니다. 아마 거기에서 시작할 수 있을까요?

+0

Pssh, 그는 이미 자신의 질문에 답변했습니다. . – BalusC