使用DynaActionForm自动填充Form

本文介绍了如何在Struts2框架中使用DynaActionForm动态表单来替代自定义ActionForm,详细展示了配置动态表单、处理表单数据以及在JSP页面中显示数据的方法,通过实例演示了DynaActionForm的使用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.引入动态Form

在前面我们已经知道,ActionForm是用来获取表单提交过来的信息。而为了具体的处理,我们必须写一个ActionForm的子类作为表单数据的存储bean。其实,我们也可以把数据填充到struts自带的动态From。这样就可以不必写ActionForm,但是却要为这个DynaActionFrom写好配置文件。

2.实例演示:新建项目dynaForm

reg.jsp页面内容如下:
<form action="<%=request.getContextPath()%>/reg.do" method="get">

           username:<input type="text" name="username"/><br>

           password:<input type="password" name="password"><br>

           age:<input type="text" name="age"><br>

           birthday:<input type="text" name="birthday"><br>

           <input type="submit" value="confirm">

</form>

web.xml配置内容如下:
和以前的配置一样,主要配置ActionServlet总控
struts-config.xml主要配置内容:
<struts-config>

<form-beans>

    <form-bean name="dyna" type="org.apache.struts.action.DynaActionForm">

       <form-property name="username" type="java.lang.String" />

       <form-property name="password" type="java.lang.String" />

       <form-property name="age" type="java.lang.Integer" />

       <form-property name="birthday" type="java.sql.Date" />

    </form-bean>

</form-beans>


    <action-mappings>

       <action path="/reg" type="com.asm.RegAction" name="dyna">

           <forward name="suc" path="/suc.jsp"></forward>

       </action>

    </action-mappings>

</struts-config>

分析此配置<form-bean>下的type不再是我们自己写的Form,而是strutsDyanActionForm。后面的<form-property>是对这个动态From进行的属性配置。注意的是里面的type属性必须是一个完整的包名,不能是简单类型(比如int类型,必须写成Integer)。理解这个配置:把DynaActionForm想成就是我们自己写的ActionForm,而<form-property>用来设定这个bean的属性就行了。

RegAction内容如下:
package com.asm;

public class RegAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response)

           throws Exception {

       DynaActionForm dyna = (DynaActionForm) form;

       String username = (String) dyna.get("username");

       String password = dyna.getString("password");

       int age = (Integer) dyna.get("age");

       java.sql.Date birthdaySql = (java.sql.Date) dyna.get("birthday");

       java.util.Date birthday = birthdaySql;


       System.
out.println("success:");

       System.out.println("usrename=" + username + "/t password=" + password

              + "/t age=" + age + "/t birthday=" + birthday);

       return mapping.findForward("suc");

    }

}

说明:转成DynaActionForm后对象后,它调用get方法返回的是一个对象Object,由于bean中本身存储的是我们前面在<form-property>中写的对象类型。所以它进行强制转换成我们所写的对象类型。 补充说明:关于它的其它操作,可以参照DynaActionForm类的Api

reg.jsp内容如下:
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>

<html>

    <body>

       ${dyna.map.username}

       ${dyna.map.password}

       ${dyna.map.birthday}

    </body>

</html>

最后,我们选择无论输入任何信息都会跳到此reg.jsp页面,在reg.jsp页面中我们利用el表达式来获取存储的dyna对象的相关属性,需要注意的是这里引用dyna对象,名字来源:
<form-bean name="dyna" type="org.apache.struts.action.DynaActionForm">中的name属性值。而map是必须的,因为动态form会的对象属性会被存成一个map形式,所以加上map引用。至于为什么要用map,这里只须记住,动态form的属性访问必须加map就行,而至于原因可以参考文档或查阅相关资料。非动态form不需要加map,可以在前面实例的基础上加上一些代码测试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值