我使用的MVC框架有点像struts。 所以,假设我的应用程序中有一个“编辑商店”链接,这就是网址的样子:
http://localhost:9080/test?action=editStore&storeNum=10
现在,action确定要运行我的Action(类似于Struts Action)。这里相应的操作是:EditStoreAction。单击此按钮将打开一个弹出窗口,其中包含商店的不同属性以供编辑。
我的问题是: 我该如何写我的行为?在这种情况下我会写两个动作吗?
或者我只写一个动作吗? EditStoreAction并将表单提交给同一个动作,我会知道用户已按下接受按钮进行提交更改。因此,我将在Action中执行不同的流程,这将保存对数据库的更新并重定向到diff页面。
这里最好的实践是什么?创建尽可能多的操作因为它保持代码模块化?或者只写一个动作来处理jsp中的everthing?
我知道这个问题听起来有点微不足道,但是,有时你只想让一切都正确。因此,问题。感谢您的帮助。
答案 0 :(得分:2)
与Spring MVC类似,这个想法是将您的操作映射到特定类的方法,比如控制器。
因此,在您的情况下,这两个动作将映射到同一个类的两个不同方法。您可以拨打课程StoreFormController
和两种方法,editStore()
和saveStore()
。
如果为每个实体制作两个控制器,那就更好了。可以是一个用于所有GET请求,另一个用于POST请求。因此,在您的情况下,对于所有其他请求将有两个控制器StoreController
,对于所有表单提交将有StoreFormController
,即发布请求。现在,您的第一个操作是GET将转到editStore()
StoreController
方法,而第二个是POST请求将转到saveStore()
StoreFormController
方法。您可以根据请求类型在这两个类中的任何一个中根据需要定义任意数量的方法。
如果你了解Spring MVC API,你可以很容易地看到我来自哪里。
答案 1 :(得分:1)
我喜欢使用struts DispatchAction类,因为我可以在action类(“execute”)方法中定义多个方法。在幕后,它所做的就是找到它必须执行的方法(在表单中提交或在URL中传递),使用反射查找方法,使用正确的参数集调用它(方法必须具有相同的方法) “执行”方法的签名,得到结果并传递它。 DispatchAction只是覆盖Action类的“execute”方法来实现该行为。
话虽如此,在你的情况下,我只定义一个类 - 让我们说“DispatchStoreAction”,我会定义两个方法,可能是“准备”和“保存”。我喜欢这样做因为我仍然有一个很好的类抽象(并且你没有把你在类名中执行的“动作”),因为你的方法可以清楚地识别他们应该做什么,以及因为,根据定义,行动类往往很小。您可能会在某处定义“StoreLogic”或“StoreBusiness”,此类将处理与您正在处理的实体相关的业务逻辑。我个人认为,如果你有一个“StoreAction”,然后是一个“StoreLogic”,一个“UserAction”和一个“UserLogic”等等,这很好 - 这种关系不需要是1对1,但我认为这有助于维护代码。
检查DispatchAction类的源代码,了解有关如何执行此操作的建议,但实现应该是微不足道的。