1

为页面加载和表单提交创建不同的操作是一种好习惯吗?假设我想查看注册到一个网站。单击注册链接后,它只会执行一个简单的操作,该操作通常会重定向页面和注册表单,然后单击提交按钮,并且相同的操作还将处理数据以将其发送到数据库?

还是对表单提交采取不同的行动更好?

4

1 回答 1

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>
于 2013-01-15T13:25:01.753 回答