Struts开发实用指南:DynaActionForm、全局异常与数据源配置
立即解锁
发布时间: 2025-08-18 00:23:41 阅读量: 2 订阅数: 9 

### Struts开发实用指南:DynaActionForm、全局异常与数据源配置
#### 1. 使用DynaActionForm
在Struts开发中,DynaActionForm是一个非常实用的工具。以下是使用DynaActionForm的详细步骤:
1. **创建动态表单**:在Form Impl中,点击Dynamic FormBean,这会将Dynamic Type字段更改为使用`org.apache.struts.action.DynaActionForm`。
2. **添加表单属性**:在Form Properties部分点击Add,输入三个字段名`courseNumber`、`courseName`和`instructor`,类型均为`java.lang.String`。当Form Property对话框第四次打开时,记得点击Close,最后点击Finish。
3. **保存配置文件**:此时`struts-config.xml`文件已更改但未保存,需要保存该文件。新的`form-beans`条目现在包含一个类型为`org.apache.struts.action.DynaActionForm`和三个`form-property`元素,如下所示:
```xml
<form-beans >
<form-bean name="courseSearchForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="instructor" type="java.lang.String" />
<form-property name="courseName" type="java.lang.String" />
<form-property name="courseNumber" type="java.lang.String" />
</form-bean>
</form-beans>
```
4. **修改Action类**:打开`CourseSearchAction`,将所有对`CourseSearchForm`的引用更改为`DynaActionForm`。可以使用编辑器的自动补全功能(Ctrl + 空格键)输入`DynaActionForm`,并使用(Ctrl + Shift + O)修正导入列表。同时,修改`if()`语句以使用`DynaActionForm.get()`方法查找课程编号字段:
```java
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm customerSearchForm = (DynaActionForm) form;
ActionForward forward = null;
String courseNumber = (String) customerSearchForm.get("courseNumber");
if (courseNumber.equalsIgnoreCase("TT490")) {
forward = mapping.findForward("success");
} else {
forward = mapping.findForward("unknown");
}
return forward;
}
```
5. **重新部署应用程序**:保存文件后,重新部署Web应用程序,必要时重启Tomcat。输入课程编号为TT490时,将显示`results.jsp`页面;输入其他课程编号时,将显示`unknown.jsp`页面。当所有字段留空时,`ActionServlet`不会将表单返回`courseSearch.jsp`,而是直接跳转到`results.jsp`或`unknown.jsp`。
#### 2. 创建混合DynaActionForm类
使用`DynaActionForm`虽然方便,但会失去验证功能,可以使用Validator框架或创建`DynaActionForm`的子类来解决这个问题。以下是创建混合`DynaActionForm`类的步骤:
1. **创建子类**:选择`eclipse.kickstart.struts.form`包,按Ctrl + N打开New Java Class对话框,选择Java, Class并点击Next。在Name字段输入`CourseSearchForm`,点击Superclass字段旁边的Browse按钮,在Superclass Selection对话框中输入字符串`dyn`,选择`DynaActionForm`并点击OK,最后点击Finish。
2. **重写验证方法**:当`CourseSearchForm`在Java编辑器中打开时,右键点击编辑器任意位置,从弹出菜单中选择Source, Override/Implement Methods。在Override/Implement Methods对话框中,展开`ActionForm`节点,勾选`validate(ActionMapping, HttpServletRequest)`并点击OK。修改`validate()`方法以检查表单字段:
```java
public ActionErrors validate(
ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
String field = (String) get("instructor");
if (field.trim().length() == 0) {
errors.add("instructor", new ActionMessage("instructor.error"));
}
field = (String) get("courseNumber");
if (field.trim().length() == 0) {
error
```
0
0
复制全文
相关推荐








