2007-04-19

spring mvc循序渐进(5)

关键字: spring

第十六步——为业务逻辑添加一些类

到目前位置,我们运用程序的实用性还不强。我们将要添加一个商品类Product和一个管理所有商品的类ProductManager。为了分离网站和业务,我们将用两个包分离java代码——网站和业务。如果这是某个公司的运用程序,我就把程序包命名为类似于com.mycompany.web和com.mycompany.bus,但到目前为止这仅仅是个演示程序,所以程序包名称将保持简短。产品类将以javaBean实现,就是用getter和setter的那种。同时使它可序列化,虽然我们的程序还不需要,但如果我们要在不同的程序层之间传递这个类,我们将很快用到。

springapp/src/bus/Product.java

  1. package bus;   
  2. import java.io.Serializable;   
  3. public class Product implements Serializable    
  4. {       
  5.     private String description;    
  6.     private Double price;     
  7.     public void setDescription(String s)    
  8.     {           
  9.         description = s;      
  10.     }      
  11.         public String getDescription()   
  12.         {         
  13.             return description;      
  14.         }       
  15.         public void setPrice(Double d)   
  16.         {       
  17.             price = d;       
  18.         }       
  19.         public Double getPrice()   
  20.         {          
  21.             return price;   
  22.         }   
  23. }   

 

产品管理类ProductManager 保存这一个商品的List,除此之外它也是个JavaBean。

springapp/src/web/SpringappController.java

  1. package bus;   
  2. import java.io.Serializable;   
  3. import java.util.List;   
  4. public class ProductManager implements Serializable    
  5. {       
  6.     private List products;   
  7.     public void setProducts(List p)   
  8.     {        
  9.         products = p;      
  10.     }      
  11.        
  12.     public List getProducts()   
  13.     {        
  14.         return products;      
  15.     }   
  16. }   

 

下一步,我修改SpringappController让它控制一个到ProductManager 的链接。正如你所见,它现在在一个分离的包web里——要记得把源代码移到这个新的位置。我同时添加了一些把产品信息传到视图的代码。getModelAndView 方法返回一个装着日期、时间和产品管理器的Map。

 springapp/src/web/SpringappController.java

  1. import org.springframework.web.servlet.mvc.Controller;   
  2. import org.springframework.web.servlet.ModelAndView;   
  3. import javax.servlet.ServletException;   
  4. import javax.servlet.http.HttpServletRequest;   
  5. import javax.servlet.http.HttpServletResponse;   
  6. import java.io.IOException;   
  7.   
  8. import java.util.Map;   
  9. import java.util.HashMap;   
  10.   
  11. import bus.Product;   
  12. import bus.ProductManager;   
  13.   
  14. import org.apache.commons.logging.Log;   
  15. import org.apache.commons.logging.LogFactory;   
  16.   
  17. public class SpringappController implements Controller   
  18. {     
  19.     /** Logger for this class and subclasses */      
  20.     protected final Log logger = LogFactory.getLog(getClass());     
  21.   
  22.     private ProductManager prodMan;   
  23.   
  24.   
  25.     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)      
  26.         throws ServletException, IOException   
  27.     {    
  28.          String now = (new java.util.Date()).toString();   
  29.         logger.info("returning hello view with " + now);   
  30.   
  31.         Map myModel = new HashMap();   
  32.         myModel.put("now", now);   
  33.         myModel.put("products", getProductManager().getProducts());   
  34.         return new ModelAndView("hello""model", myModel);   
  35.     }   
  36.   
  37.     public void setProductManager(ProductManager pm) {   
  38.         prodMan = pm;   
  39.     }   
  40.   
  41.     public ProductManager getProductManager() {   
  42.         return prodMan;   
  43.     }   
  44.   
  45. }   

第十七步——修改视图让它显示业务数据同时添加代码让它支持消息池(message bundle)

使用JSTL的<c:forEach>标签,我添加了一小片显示产品信息的代码。我同时用JSTL的 <fmt:message>标把title由“heading and greeting”换成消息池里的信息——这个代码将在稍后显示。

springapp/war/WEB-INF/jsp/hello.jsp

  1. <%@ include file="/WEB-INF/jsp/include.jsp" %>  
  2. <html>  
  3. <head>  
  4. <title><fmt:message key="title"/></title>  
  5. </head>  
  6.   
  7. <body>  
  8. <h1><fmt:message key="heading"/></h1>  
  9.   
  10. <p><fmt:message key="greeting"/> <c:out value="${model.now}"/></p>  
  11.   
  12. <h3>Products</h3>  
  13. <c:forEach items="${model.products}" var="prod">  
  14.   <c:out value="${prod.description}"/> <i>$<c:out value="${prod.price}"/></i><br><br>  
  15. </c:forEach>  
  16.   
  17. </body>  
  18.   
  19. </html>  
评论
发表评论

您还没有登录,请登录后发表评论

aninfeel
搜索本博客
博客分类
最近加入圈子
最新评论
评论排行榜