JBuilder2005 Struts深度体验之改造

2008-02-23 07:49:28来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  用ActionForm截获登录表单数据

  原登录模块用bookstore.User描述login.jsp登录页面表单的数据,在switch.jsp程序中通过<jsp:useBean>标签获取login.jsp表单的数据。其实User类相当于Struts框架中的模型,我们将通过一个ActionForm更好地实现这个功能。

  ActionForm和Bean一样以属性名匹配的映射机制从HTTP请求中填充对象数据,但ActionForm比一般的Bean提供了更多的功能,Struts允许ActionForm通过validate()方法进行自校验,当数据不合法时自动转向到输出界面,此外还可以通过reset()方法,在数据填充前复位属性值。

  下面我们就来创建UserActionForm,替换User的功能,建立起Struts框架中的"数据模型"。

  1.指定ActionForm的Web模块及类信息

  File->New...->Web->在Web页中双击ActionForm图标,弹出如图 6所示的对话框:


图 6 创建UserActionForm
  ·Struts config:我们前面有提到Struts1.1支持多个配置文件,所以你在这儿可以选择使用哪个Struts配置文件。因为我们现在还没有定义多个Struts配置文件,所以只得使用struts-config.xml。在开发新增图书的功能时,我们将定义另一个配置文件。

  ·ActionForm:ActionForm的类名,这里我们填入UserActionForm。

  按Next到下一步。

  2.定义ActionForm属性


图 7 定义ActionForm属性
  通过Add...按钮为UserActionForm增加4个属性,如图 7所示。特别的,如果这个ActionForm所对应的入口页面已经创建,你也可以直接通过Add from JSP...按钮,选择一个JSP页面,JBuilder会分析这个页面的表单,并将表单的数据组件名抽取为ActionForm的属性。

  按Next到下一步。

  3.一些附加功能的定义


图 8 附加功能定义
  在FormBeanName中为UserActionForm指定一个名字,一般接受JBuilder所提供的默认名即可。这个名字将在struts-config.xml文件用来命名UserActionForm。

  ActionForm比一般JavaBean强大的地方在于它可以进行数据检验,还可以进行数据复位。如果这个ActionForm最终要放到session中的,那么最好实现reset()方法,以复位ActionForm的数据,否则属性可能不会反映最新的值。这里, UserActionForm无需进行数据有效性校验,但由于UserActionForm最终需要放到session中,所以我们需要实现reset()方法。故此我们勾选Create/replace reset() method body选项。

  直接按Finish创建UserActionForm,再将User类的代码拷贝过来,整改后的最终代码如下所示:

  代码清单 6 以ActionForm实现的User类

1. package bookstore;
2.
3. import java.sql.*;
4. import java.text.*;
5. import java.util.Date;
6. import javax.servlet.http.*;
7. import org.apache.struts.action.*;
8.
9. public class UserActionForm
10. extends ActionForm
11. {
12.  private String userId;
13.  private String password;
14.  private String userName;
15.  private String loginDatetime;
16.  public String getPassword() {
17.   return password;
18.  }
19.
20.  …
21.  //复位所有属性值
22.  public void reset(ActionMapping actionMapping,HttpServletRequest servletRequest) {
23.   this.userId = null;
24.   this.userName = null;
25.   this.password = null;
26.   this.loginDatetime = null;
27. }


  此外,JBuilder自动在struts-conf.xml文件中通过<form-bean>描述ActionForm。UserActionForm必须和一个Action相关联,因为HTTP请求通过Struts总控制器转发给Action,Struts控制器一旦发现Action有一个对应的ActionForm时,就用HTTP请求的数据填充这个ActionForm。

  用Action代替switch.jsp的控制转换功能

  我们在前面已经数落用switch.jsp实现请求转换控制的缺点,Struts框架的Action是实现请求转换控制的最适合替代者。

  在这节里,我们就来创建一个名为LoginAction的Action,让其完美的接替switch.jsp的工作。

  File->New...->Web->在Web页中双击Action图标,启动创建Action的向导。

  1.指定Action名字及Web模块


图 9 指定Web模块及Action名字
  在Action中键入LoginAction作为Action的类名,其中Base class的下拉框中有许多Action基类可供选择,它们用于不同的场合,这些选项是:

  ·org.apache.struts.action.Action:标准的Action。

  ·org.apache.struts.actions.ForwardAction:相当于JSP的<jsp:forward>,方便Struts控制器进行预处理。此外,从学究的角度上来说,在JSP页面直接通过<jsp:forward>违反了MVC的分层原则,控制器无法干预。

  ·org.apache.struts.actions.IncludeAction:出于ForwardAction相似的原因,Struts推荐用IncludeAction代替JSP的<jsp:include>。

  ·org.apache.struts.actions.LookupDispatchAction:如果一个表单有多个提交按钮,不同的提交按钮执行不同的业务操作,用DispatchAction最为合适。

  ·org.apache.struts.actions.SwitchAction:用SwitchAction可在不同的Struts模块间转换。

  由于我们的Action需要完成用户密码验证的业务,并根据结果转换到不同的页面中,所以这个LoginAction是一个普通的Action,故我们选择org.apache.struts.action.Action。

  按Next到下一步。

  2.设置Action的配置信息


图 10 设置LoginAction的配置信息
  ·Action path:访问这个Action的URI,接受默认的/loginAction,这样我们将通过类似这样的URL:http://127.0.0.1:8080/webModule/loginAction.do来访问这个Action。

  ·FormBean name:下拉框中列出Web模块中所有的ActionForm,我们选择前一小节中所创建的userActionForm。这样客户端的HTTP请求访问LoginAction时,HTTP请求所带的数据就会被Struts总控制器自动填充到userActionForm中了。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JBuilder2005 Struts深度体验之新增

下一篇:JSP通过JDBC与Oracle相连