`

struts form 的DynaActionForm应用

阅读更多

为了减少Form类,DynaActionForm得到应用

配置如下:

<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="name" type="java.lang.String" ></form-property>
			<form-property name="age" type="java.lang.Integer"></form-property>
		</form-bean>

 

<action path="/dynaAction" type="com.lwf.struts.action.DynaAction" name="dynaForm">
			<forward name="success" path="/dynaResult.jsp"></forward>
		</action>

 

自定义Action类

package com.lwf.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;

public class DynaAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
//		DynaActionForm dynaForm = (DynaActionForm)form;
//		String name = (String)dynaForm.get("name");
//		Integer age = (Integer)dynaForm.get("age");
		
		String name = (String)PropertyUtils.getSimpleProperty(form, "name");
		Integer age = (Integer)PropertyUtils.getSimpleProperty(form, "age");
		
		
//		request.setAttribute("name", name);
//		request.setAttribute("age", age);
		return mapping.findForward("success");
	}

}

 

转发到结果文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
dyna result:

<br>
${name }
<br>
${age }

<br>
${dynaForm.map.name }
${dynaForm.map.age }
</body>
</html>

 

需要注意的地方:

根据struts源代码Form类的处理:

 protected ActionForm processActionForm(HttpServletRequest request,
        HttpServletResponse response, ActionMapping mapping) {
        // Create (if necessary) a form bean to use
        ActionForm instance =
            RequestUtils.createActionForm(request, mapping, moduleConfig,
                servlet);

        if (instance == null) {
            return (null);
        }

        // Store the new instance in the appropriate scope
        if (log.isDebugEnabled()) {
            log.debug(" Storing ActionForm bean instance in scope '"
                + mapping.getScope() + "' under attribute key '"
                + mapping.getAttribute() + "'");
        }

        if ("request".equals(mapping.getScope())) {
            request.setAttribute(mapping.getAttribute(), instance);
        } else {
            HttpSession session = request.getSession();

            session.setAttribute(mapping.getAttribute(), instance);
        }

        return (instance);
    }

 

我们看到最后会把对应的form放到请求域中.

 

所以在上面的DynaAction类及dynaResult.jsp文件中,演示了几种方法设置和取form属性值.

 

DynaActionForm dynaForm = (DynaActionForm)form;
String name = (String)dynaForm.get("name");
Integer age = (Integer)dynaForm.get("age");
request.setAttribute("name", name);
request.setAttribute("age", age);

 这时候我们在dynaResult.jsp中要取得name,age属性的值.就有两种方法.

一种就是因为我们设置了两个值进入请求域中,所以可以直接取

${name }

${age }

 

上面代码意思就相当于

request.getAttribute("name") ;
request.getAttribute("age") ;

 

另一种:因为我们说过ActionForm实例化并收集数据后,会自动将该form放到域中.

${dynaForm.map.name }
${dynaForm.map.age }

 

这里相当于:

dynaForm.getMap().getName();
dynaForm.getMap().getAge();
这里要理解DynaActionForm的实现,它实际上先取到表单上的值,然后把
<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="name" type="java.lang.String" ></form-property>
			<form-property name="age" type="java.lang.Integer"></form-property>
		</form-bean>
这里面的name,age属性与对应的表单入进HashMap中,我们在DynaAction中使用
DynaActionForm dynaForm = (DynaActionForm)form;
String name = (String)dynaForm.get("name");
Integer age = (Integer)dynaForm.get("age");
实际上就是从map中拿出值.

 

在取值的时候可以用

String name = (String)PropertyUtils.getSimpleProperty(form, "name");
Integer age = (Integer)PropertyUtils.getSimpleProperty(form, "age");

 来代替

DynaActionForm dynaForm = (DynaActionForm)form;
String name = (String)dynaForm.get("name");
Integer age = (Integer)dynaForm.get("age");

 这两段代码是一样的意思,只不过一个是采用第三方类而以.

 

另外要注意的是当我们使用

String name = (String)PropertyUtils.getSimpleProperty(form, "name");
Integer age = (Integer)PropertyUtils.getSimpleProperty(form, "age");

 

时我们的dynaResult.jsp上面仍然使用:

${dynaForm.map.name }
${dynaForm.map.age }

 来获取属性值 ..

这里面你可能会说DynaAction中都没有见到dynaForm,怎么能取出来呢..

这里dynaForm应理解为struts_config.xml中的formBean的name值.

 

 

也可以重新设置属性的值:

下面两段代码等价:

DynaActionForm dynaForm = (DynaActionForm)form;
dynaForm.set("name", "dddddddd");

 

PropertyUtils.setSimpleProperty(form, "name", "sssss");

 

都是对name属性的值进行设置

分享到:
评论

相关推荐

    struts1.0的上传代码

    3. **创建表单Bean**:在Struts应用中,表单Bean(通常是DynaActionForm)用于封装用户输入的数据。对于文件上传,我们需要在Bean中声明一个类型为`org.apache.struts.upload.FormFile`的属性,比如`uploadFile`,它...

    Eclipse开发Struts1.2

    - 在`struts-config.xml`中定义DynaActionForm,`form-bean`元素下的`form-property`定义属性及其类型。 8. **表单属性类型**: - `type`属性用于指定表单属性的Java类型,例如:整数类型(`java.lang.Byte`等)...

    struts的总结(struts1.x)

    它继承自 `org.apache.struts.action.DynaActionForm` 类,并且可以通过 `&lt;form-property&gt;` 标签在 `struts-config.xml` 文件中定义表单字段。 ```xml &lt;form-bean name="xxForm" type="org.apache.struts.action....

    [摘]Struts 学习笔记之ActionForm

    Struts是Java Web开发中的一个经典框架,它在MVC(Model-View-Controller)设计模式的基础上提供了一种实现方式,极大地简化了Web应用的构建。ActionForm是Struts框架中一个关键组件,用于处理用户从视图层提交的...

    Struts1基本配置

    &lt;controller processorClass="org.apache.struts.action.DynaActionForm"&gt; &lt;!-- Controller配置 --&gt; &lt;!-- 全局转发配置 --&gt; &lt;!-- 国际化资源配置 --&gt; &lt;/struts-config&gt; ``` - **web.xml**:作为...

    struts7验证框架 struts7验证框架

    Struts7验证框架是用于Java Web开发中的一个...总的来说,Struts7验证框架和DynaActionForm是Struts框架中提高开发效率和代码质量的重要工具,它们帮助开发者轻松管理表单数据和验证逻辑,降低了J2EE应用程序的复杂性。

    struts1.x上传实例

    &lt;form-bean name="actionForm" type="org.apache.struts.action.DynaActionForm"&gt; &lt;form-property name = "filedata" type = "org.apache.struts.upload.FormFile" /&gt; &lt;/form-bean&gt; &lt;/form-beans&gt; ...

    Struts高级部分(2)(常用Action、验证框架、动态Form

    2. **JSP标签库**:Struts提供了` DynaActionForm`和`DynaValidatorForm`,它们是动态Form的基础。在JSP页面中,可以使用Struts的标签库动态显示和处理表单字段。 3. **ModelDriven接口**:ModelDriven接口允许...

    struts例子struts例子

    动态ActionForm不再需要为每个表单创建单独的FormBean类,而是通过在`struts-config.xml`配置文件中声明`&lt;form-bean&gt;`的`type`属性为`org.apache.struts.action.DynaActionForm`来创建。这样,一个动态ActionForm就...

    动态form编写

    &lt;form-bean name="searchForm" type="org.apache.struts.action.DynaActionForm"&gt; &lt;form-property name="keyword" type="java.lang.String"/&gt; &lt;form-property name="keyword" type="java.lang.String"/&gt; &lt;/form-...

    Struts高级部分(2)(常用Action、验证框架、动态Form)笔记

    Struts是一个经典的Java Web开发框架,它简化了MVC(Model-View-Controller)模式的实现。本章主要讨论Struts框架中的高级...这些工具极大地丰富了Struts的功能,使得开发者能够构建出更加健壮和高效的Web应用程序。

    struts2.1配置

    在struts.xml中定义一个DynaActionForm,然后在Action中通过DynaActionForm获取属性。 9. **文件上传**:Struts2支持文件上传功能。在JSP中使用`enctype="multipart/form-data"`来指定文件上传的表单类型。在...

    Struts原理(二)

    在"Struts原理(二)"中,我们将深入探讨如何利用Struts框架的一些高级特性,如DispatchAction、资源文件的国际化、错误信息的显示、DynaActionForm以及实体对象作为Form属性的使用。 **掌握DispatchAction** ...

    struts1 用到的所有jar包.rar

    2. **struts-bean.jar**:这个JAR文件包含了一些用于数据绑定和展示的类,如ValueStack、BeanUtils和 DynaActionForm。它们帮助将用户输入的数据映射到Java对象,并反之。 3. **struts-html.jar**:提供了各种HTML...

    struts_dynForm用例

    &lt;form-bean name="dynForm" type="org.apache.struts.action.DynaActionForm"&gt; &lt;form-property name="dynamicProperties" type="java.util.Map"/&gt; &lt;/form-bean&gt; &lt;/form-beans&gt; ``` 在上述配置中,`...

    struts动态表单实例

    Struts 是一个开源的JavaEE框架,用于构建可维护、结构清晰且易于扩展的企业级Web应用程序。它基于Model-View-Controller(MVC)设计模式,帮助开发者将业务逻辑、数据表示和用户界面分离,从而提高开发效率和代码...

    struts-config.xml配置

    &lt;data-source key="exampleDS" type="org.apache.struts.action.DynaActionForm"&gt; &lt;!-- DataSource配置属性 --&gt; ``` **3. ActionForward配置** `ActionForward`定义了请求成功或失败后的页面跳转。它可以是...

    struts1.2.4 jar包

    2. **struts-bean**: 提供了用于表示和管理Web应用中数据的Bean类,如 DynaActionForm,使得动态字段的管理更为方便。 3. **struts-html**: 提供了一系列JSP标签库,如html:form、html:submit等,方便在JSP页面上...

    struts配置数据源的问题

    例如,你可以使用`org.apache.struts.action.DynaActionForm`动态表单类来注入数据源。 ```xml ``` 4. **在Action类中获取数据源**:在Action类中,通过`ActionServlet`的`getServletContext().lookup()`方法...

Global site tag (gtag.js) - Google Analytics