使用 Easy Struts for Eclipse 开发 Struts-开发 Struts 应用程序(2)
- UID
- 1066743
|
使用 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. 成功 |
|
|
|
|
|