为页面加载和表单提交创建不同的操作是一个好习惯吗?假设我想查看注册网站。单击链接进行注册后,它将转到一个简单的操作,通常只是重定向页面和注册表单,然后单击提交按钮,同样的操作也将处理数据以将其发送到数据库?
或者对表单提交采取不同的操作是否更好?
答案 0 :(得分:2)
这种情况没有真正的“好或坏”。它具有类似的复杂性,但功能的位置不同。我倾向于一般的许多小班,但还有另一种选择。
我倾向于使用单一操作,多种方法,以及区分GET和POST请求的拦截器。拦截器返回GET请求的已知结果(例如,"input"
),并允许对POST结果进行正常处理(即正常动作调用)。
这样可以规范化表单处理,并消除了整个应用程序中简单表单处理方案的多种方法的手动配置。
使用Convention插件会让它变得不那么有趣,虽然自动执行它是一件令人愉快的事情:一旦你知道应用程序的GET / POST“秘密”,你就再也不用考虑它了。
解决你的意见:
不同的功能必须在某处。
在S2中,您有两种方法:使用多种方法的操作或多种操作。这就是我认为你的问题正在解决 - 这是“更好”。 (答案:这取决于。)
以下使用XML配置;注释基本上是相同的。
使用多个动作非常简单;一个人甚至可能是默认行动:
<action name="login">
<result>WEB-INF/jsps/login.jsp</result>
</action>
如果没有表格准备,你就完成了。然后配置执行登录的操作:
<action name="doLogin">
<result name="input">WEB-INF/jsps/login.jsp</result>
<result type="redirectAction">home</result>
</action>
使用多种方法几乎完全相同:
<!-- If LoginAction extends ActionDefault, the "input()" method -->
<!-- is supplied by the base class, and just returns "input". -->
<action name="login" class="com.foo.bar.LoginAction" method="input">
<result name="input">WEB-INF/jsps/login.jsp</result>
</action>
<!-- Default action method is "execute()". -->
<action name="doLogin" class="com.foo.bar.LoginAction">
<result name="input">WEB-INF/jsps/login.jsp</result>
<result type="redirectAction">home</result>
</action>