使用Spring更好地处理Struts动作

http://tech.ddvip.com   2006年11月20日    社区交流

本文详细介绍使用Spring更好地处理Struts动作

  清单 3. 在 Spring 配置文件中注册一个动作

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
 "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>
 <bean name="/searchSubmit" 
  class="ca.nexcel.books.actions.SearchSubmit"> |(1)
   <property name="bookService">
    <ref bean="bookService"/>
   </property>
 </bean>
</beans>

  注意:在 (1) 处,我使用名称属性注册了一个 bean,以匹配 struts-config 动作映射名称。SearchSubmit 动作揭示了一个 JavaBean 属性,允许 Spring 在运行时填充属性,如清单 4 所示:

  清单 4. 具有 JavaBean 属性的 Struts 动作

package ca.nexcel.books.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import ca.nexcel.books.beans.Book;
import ca.nexcel.books.business.BookService;
public class SearchSubmit extends Action {
 
 private BookService bookService;
 public BookService getBookService() {
  return bookService;
 }
 public void setBookService(BookService bookService) { | (1)
  this.bookService = bookService; 
 } 
 public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
  throws IOException, ServletException {
  DynaActionForm searchForm = (DynaActionForm) form;
  String isbn = (String) searchForm.get("isbn");
 
 Book book = getBookService().read(isbn.trim()); |(2)
  if (null == book) {
   ActionErrors errors = new ActionErrors();
   errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("message.notfound"));
   saveErrors(request, errors);
   return mapping.findForward("failure") ;
 }
   request.setAttribute("book", book);
   return mapping.findForward("success");
 }
}

  在清单 4 中,您可以了解到如何创建 Struts 动作。在 (1) 处,我创建了一个 JavaBean 属性。DelegatingRequestProcessor自动地配置这种属性。这种设计使 Struts 动作并不知道它正被 Spring 管理,并且使您能够利用 Sping 的动作管理框架的所有优点。由于您的 Struts 动作注意不到 Spring 的存在,所以您不需要重写您的 Struts 代码就可以使用其他控制反转容器来替换掉 Spring。

来源:ibm    作者:George Franciscus    责编:豆豆技术应用

正在加载评论...