学习Struts框架时,经常会遇到SaveNewOrder Action问题,这里将介绍SaveNewOrder Action问题的解决方法。
SaveNewOrder Action
示例应用的用户接口层使用Struts框架。这儿我们将讨论当为一个应用分层时和Struts相关的部分。让我们从在struts-config.xml文件里检查一个Action配置开始。
- type="com.meagle.action.SaveOrderAction"
- name="OrderForm"
- scope="request"
- validate="true"
- input="/NewOrder.jsp">
- Save New Order
- path="/NewOrder.jsp"
- scope="request"
- type="com.meagle.exception.OrderException"/>
- path="/NewOrder.jsp"
- scope="request"
- type="com.
- meagle.
- exception.
- OrderMinimumAmountException"/>
SaveNewOrder Action被用来持久化一个用户从用户接口层提交的订单。这是一个典型的Struts Action;然而,注意这个action的异常配置。这些Exceptions为我们的业务服务对象也在Spring 配置文件(applicationContext-hibernate.xml)中配置了(在transactionAttributes属性里)。当这些异常被从业务层掷出我们能在我们的用户接口里恰当的处理它们。第一个异常,OrderException,当在持久层里保存订单对象失败时将被这个action使用。这将引起事务回滚和通过业务对象传递把异常传回给Struts层。OrderMinimumAmountException,在业务对象逻辑里的一个事务因为提交的订单达不到最小订单数量而失败也将被处理。然后,事务将回滚和这个异常能被用户接口层恰当的处理。
最后一个连接步骤是使我们的表现层和我们的业务层交互。这已经通过使用前面讨论的服务定位器来完成了。服务层充当一个到我们的业务逻辑和持久层的接口。这儿是Struts框架中的SaveNewOrder Action可能怎样使用一个服务定位器调用一个业务方法:
- public ActionForward execute( ActionMapping mapping, ActionForm form,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)- throws java.lang.Exception {
- OrderForm oForm = (OrderForm) form;
- // Use the form to build an Order object that
- // can be saved in the persistence layer.
- // See the full source code in the sample app.
- // Obtain the wired business service object
- // from the service locator configuration
- // in BaseAction.
- // Delegate the save to the service layer and
- // further upstream to save the Order object.
- getOrderService().saveNewOrder(order);
- oForm.setOrder(order);
- ActionMessages messages = new ActionMessages();
- messages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("message.order.saved.successfully"));- saveMessages(request, messages);
- return mapping.findForward("success");
- }
【编辑推荐】