In the past, I implemented a non-Spring MVC framework for ASP.Net. It handles events differently than Spring. Since I am not thoroughly familiar with Spring.Web, I wanted to understand the possibilities of using a FrontController versus the Page Controller pattern.
Spring.Web seems to use ASP.Net's built-in event handling which posts back to the Page. The non-Spring framework I currently use, rewrites the form action to always post to Default.aspx and uses a hidden input value to determine which event is to be processed. For example,
<form action="/Default.aspx" ...
<input type="hidden" name="evt" value="widget.updWidget">
...
All requests are handled via an httpModule which calls the core framework to do the following:
+ capture event key from request, e.g. evt=widget.updWidget
+ auto-load bean object with helper class to call setter methods
+ look up event (note that on app init, events detailed in xyzConfig.xml are cached in EventManager class)
+ dispatch event to listener --> call bean's validate method --> if success, call service (business object code) --> call dao and/or gateway as necessary --> return to listener
+ set result key based on outcome and use key to locate and build response
Can Spring.Web be used in a similar fashion? I hope this is somewhat clear. Thanks in advance for any insight and direction you can provide.
Code:// --------------------------------------------------------------------- // web.config // --------------------------------------------------------------------- <httpModules> <add type="CmsProject.MyHttpModuleA,CmsProject" name="MyHttpModuleA" /> </httpModules> // --------------------------------------------------------------------- // MyHttpModuleA.cs // --------------------------------------------------------------------- namespace CmsProject { public class MyHttpModuleA : GenericApplication.CMSHttpModule, IHttpModule, IRequiresSessionState { GiGi.FrontControllerHandler controller = null; private void context_PreRequestHandlerExecute(object sender, EventArgs e) { System.Web.HttpContext ctx = System.Web.HttpContext.Current; // Brief description of MVC framework's controller.ProcessRequest: // capture event key from request, e.g. evt=widget.updWidget // look up event (on app init, events detailed in xyzConfig.xml are cached in EventManager class) // dispatch event to listener --> call service (business object code) --> call gateway, dao as necessary // result key used to locate and build response controller.ProcessRequest(ctx); } } } // --------------------------------------------------------------------- // widgetConfig.xml // --------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <GiGi version="1.0"> <properties> <property name="DB_WIDGET_WIDGETID_MIN_VALUE" value="1" /> <property name="DB_WIDGET_WIDGETID_MAX_VALUE" value="2147483647" /> <property name="DB_WIDGET_WIDGETTYPEID_MIN_VALUE" value="1" /> <property name="DB_WIDGET_WIDGETTYPEID_MAX_VALUE" value="2147483647" /> <property name="DB_WIDGET_TITLE_MIN_LENGTH" value="0" /> <property name="DB_WIDGET_TITLE_MAX_LENGTH" value="50" /> <property name="DB_WIDGET_DESCRIPTION_MIN_LENGTH" value="0" /> <property name="DB_WIDGET_DESCRIPTION_MAX_LENGTH" value="255" /> <property name="DB_WIDGET_COST_MIN_VALUE" value="0" /> <property name="DB_WIDGET_COST_MAX_VALUE" value="2147483647" /> </properties> <listeners> <listener name="widgetListener" type="MyCmsProject.View.WidgetListener"> <invoker type="GiGi.framework.invokers.CFCInvoker_Event" /> </listener> </listeners> <event-handlers> <event-handler event="widget.showWidgets" access="public"> <event-bean name="widgetListBean" type="MyCmsProject.View.ListBean" /> <notify listener="widgetListener" method="doShowWidgets" /> <view-page name="widget-Widgets" contentKey="view.layout.content" /> </event-handler> <event-handler event="widget.showWidget" access="public"> <event-bean name="widgetBean" type="MyCmsProject.View.WidgetBean" /> <notify listener="widgetListener" method="doShowWidget" /> <view-page name="widget.widget" contentKey="view.layout.content" /> </event-handler> <event-handler event="widget.updWidget" access="public"> <event-bean name="widgetBean" type="MyCmsProject.View.WidgetBean" /> <event-mapping event="success" mapping="widget.showWidgets" /> <event-mapping event="failure" mapping="widget.showWidget" /> <notify listener="widgetListener" method="doUpdateWidget" /> </event-handler> <event-handler event="widget.delWidget" access="public"> <event-mapping event="success" mapping="widget.showWidgets" /> <event-mapping event="failure" mapping="widget.showWidgets" /> <notify listener="widgetListener" method="doDeleteWidget" /> </event-handler> </event-handlers> <page-views> <page-view name="widget-Widgets" page="/View/WWW/aspx/widgets.aspx" /> <page-view name="widget.widget" page="/View/WWW/aspx/widget.aspx" /> </page-views> </GiGi>


Reply With Quote