首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Easy Struts for Eclipse 开发 Struts-开发 Struts 应用程序(2)

使用 Easy Struts for Eclipse 开发 Struts-开发 Struts 应用程序(2)

修改 ActionForm 类
将 ActionForm.java 中的所有“Integer”修改为“int”,这是因为您刚才创建的表单属性“tel”的类型是 java.lang.Integer。然后编写 validate() 方法的代码,对用户输入的表单属性进行验证。validate() 方法的完整代码如 所示。            
ActionError(“error.noEmail”)中的“error.noEmail”是资源属性文件中定义的一个关键字,它等价于“<li><fontcolor=red>Enter your email</font> ”。在资源属性文件中,可以使用 <html>代码。ActionErrors 中 add(java.lang.String property, ActionError error) 方法的参数property 是一个表单属性名。这个 ActionError 只能与一个指定的表单属性相关。例如,如果 email 地址为空,或者只包含空格字符,那么在对表单进行验证时就会显示“Enteryour email”消息。如果在 email 地址中没有“@”字符,那么就会显示“Correct your email”消息,这是在资源属性文件中使用“error.wrongEmail”关键字定义的。这两个错误都只与表单属性“email”有关(参见 )。我们稍后再回来介绍。            
清单 1. OwnerForm.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.asprise.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
         
        import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class OwnerForm extends ActionForm {
   private String email;
   private String greet = "Mr.";
   private String address;
   
         
        private int tel = 0;
   private String name;
         
         
   public ActionErrors validate(
      ActionMapping mapping,
      HttpServletRequest request) {
      ActionErrors errors = new ActionErrors();
      if (greet == null || greet.trim().equals("")) {
         errors.add("greet", new ActionError("error.greet"));
      }
      if (name == null || name.trim().equals("")) {
         errors.add("name", new ActionError("error.name"));
      }
      if (address == null || address.trim().equals("")) {
         errors.add("address", new ActionError("error.address"));
      }
      if (email == null || email.trim().equals("")) {
         errors.add("email", new ActionError("error.noEmail"));
      }
      else if (email.indexOf("@")==-1) {
         errors.add("email", new ActionError("error.wrongEmail"));
      }
      if (tel==0) {
         errors.add("tel", new ActionError("error.tel"));
      }
      return errors;
      }
      ...
   public String getEmail() {
      return email;
   }
   public void setEmail(String email) {
      this.email = email;
   }
   ...
}




在资源属性文件中可以使用 <html> 代码。资源属性文件的内容是一些键-值对(参见 )。在源代码文件中可以调用这些关键字。在每个资源属性文件中系统都需要 errors.header 和 errors.footer这两个关键字。            
清单 2. ApplicationResources.properties
1
2
3
4
5
6
7
8
errors.header=<h4>Validation Error(s)</h4><ul>
errors.footer=</ul><hr>
error.greet=<li>Choose your greet
error.name=<li>Enter your name
error.address=<li>Enter your address
error.tel=<li>Enter your contact number
error.wrongEmail=<li>Correct your email
error.noEmail=<li>Enter your email




修改 Action 类
OwnerAction 类会在局部转发路径“success”中简单地显示一条诸如“Thank you, Miss Nancy Chen”之类的消息。请修改OwenerAction 类的 execute() 方法来实现您的逻辑,(每个 action 类都必须实现 execute() 方法)。参见 ,它会将控制流程转向 success.jsp。            
清单 3. OwnerAction.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class OwnerAction extends Action {
   public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
      OwnerForm ownerForm = (OwnerForm) form;
      
         
         
      String greet = ownerForm.getGreet();
      String name = ownerForm.getName();
      request.setAttribute("name", name);
      request.setAttribute("greet", greet);
      // Forward control to the specified success target
      return (mapping.findForward("success"));
      }
}




修改 JSP 文件
首先,为 <html:select> 添加 <htmlption>,完成表单(参见 )。然后在表单后面添加一个 <html:errors />,这用来演示一个与属性为“proerty”的 <html:error>不同的行为。例如,<html:errors property="name"> 只会反映与表单属性“name”相关的用户输入的验证。可以使用ActionErrors 类的 add(String property, ActionError error) 方法为一个表单属性关联一些错误。<html:errors/> 则会反映这个表单中所有的验证错误。这些错误会在调用 <html:error> 的地方显示。            
清单 4. owner.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<html>
   <head>
      <meta
         name = "Generator"
         content = "Easy Struts Xslt generator for Eclipse (http://easystruts.sf.net).">
      <title>Struts Form for ownerForm</title>
   </head>
   <body>
      <html:form action="/owner">
         
         
         greet : <html:select property="greet">
                    <htmlption value=""></htmlption>
                    <htmlption value="Mr.">Mr.</htmlption>
                    <htmlption value="Miss">Miss</htmlption>
                    <htmlption value="Mrs.">Mrs.</htmlption>
                 </html:select><html:errors property="greet"/>
          name : <html:text property="name"/><html:errors property="name"/></br>
          address : <html:text property="address"/><html:errors property="address"/></br>
          email : <html:text property="email"/><html:errors property="email"/></br>
          tel : <html:text property="tel"/><html:errors property="tel"/></br>
         <html:submit/><html:cancel/>
      </html:form>
         
         
     <html:errors />
   <body>
</html>




现在,代码 success.jsp 会显示一条诸如“Thank you, Miss Nancy Chen”之类的消息。其中“Miss”是所有者的问候,而“NancyChen”是所有者的名字。最终的文件如 所示。            
清单 5. success.jsp
1
2
3
4
5
6
7
8
9
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<logic:present name="name" scope="request">
Thank you,
   <logic:present name="greet" scope="request">
      <bean:write name="greet" scope="request"/>
   </logic:present>
   <bean:write name="name" scope="request"/>
</logic:present>




<logic:present> 是一个 Struts logic 标签。当逻辑标签具有属性“name”时,就应该检查是否存在这个指定名的JSP bean。关于 <logic:present> 的属性完整列表和 Struts logic 标签的完整列表,请参阅
<bean:write> 是一个 Struts bean 标签。它被用来将指定的 bean 属性的值传递给当前的 JspWriter。当bean 标签具有属性“name”和属性“property”时,就是指其属性被访问以获取由“property”所指定的值的 bean 的属性名。如果没有指定“property”属性,那么就会传递这个 bean 本身的值。关于 <logic:present> 属性以及 Strutslogic 标签的完整列表,请参阅 。            
检查 struts-config.xml
当您在 Eclipse 环境中单击“struts-config.xml”时,就会在一个图形用户界面中显示 struts-config.xml,如 所示。这样可以允许开发人员方便地编辑大部分 Easy Struts 功能。也可以通过单击“source”选项卡来查看 struts-config.xml的源代码。            
图 15. struts-config.xml测试应用程序
单击 Tomcat 工具栏按钮,重新启动 Tomcat 服务器。然后在 URL 地址栏中输入“http://127.0.0.1:8080/easyStruts/owner.jsp”。现在屏幕上就会显示 。验证结果如 所示。注意有无属性“property”时 <html:errors> 的不同行为。如果有“property”属性,系统只会返回与该属性有关的错误。如果没有属性“property”,那么系统就会返回该表单中的所有错误。当所有的输入都正确无误时,系统会将控制流程转到 success.jsp 上,这样会显示一条消息:“Thankyou, Miss Nancy Chen”(参见 )。            
图 16. owner.jsp图 17. Form 验证错误图 18. 成功
返回列表