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