页面加载的操作和Struts 2中的表单操作

时间:2013-01-15 12:33:16

标签: java jsp struts2

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

或者对表单提交采取不同的操作是否更好?

1 个答案:

答案 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>