通常情况下,我们要在ActionForm中为相应表单定义对应的私有属性,再通过Getter和Setter设置和获得表单的数据。
但如果表单数据域比较多,那么就需要在ActionForm中为每个表单域定义一个私有属性并定义相应的Getter、Setter方法。
解决方法有两种,一种是在ActionForm中定义一个Map私有属性,动态产生表单提交的数据域;另一种是使用DynaActionForm。
这里,我想以一个例子介绍一下第一种方法。
首先创建ActionForm类:TestForm
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
2
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
3
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
4
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
5
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
6
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OURiMjUwY21GamRHVmtRbXh2WTJzdVoybG0%3D.jpg?w=700&webp=1)
7
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
8
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
9
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpGTjFZa0pzYjJOclUzUmhjblF1WjJsbQ%3D%3D.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OURiMjUwY21GamRHVmtVM1ZpUW14dlkyc3VaMmxt.jpg?w=700&webp=1)
10
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
11
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpGTjFZa0pzYjJOclJXNWtMbWRwWmc9PQ%3D%3D.jpg?w=700&webp=1)
12
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
13
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpGTjFZa0pzYjJOclUzUmhjblF1WjJsbQ%3D%3D.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OURiMjUwY21GamRHVmtVM1ZpUW14dlkyc3VaMmxt.jpg?w=700&webp=1)
14
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
15
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpGTjFZa0pzYjJOclJXNWtMbWRwWmc9PQ%3D%3D.jpg?w=700&webp=1)
16
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
17
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
请注意第7行,这里定义了一个私有变量,该变量是一个Map类。
第9、13行分别定义了Getter和Setter方法,这里,Getter方法需要一个参数,用于传递表单域(即动态属性)的名称,Setter方法需要两个参数,分别是表单域名称和对应的值,这和传统的ActionForm的Getter和Setter有很大分别。
然后创建Action类:TestAction
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
2
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
3
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
4
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
5
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
6
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
7
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
8
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
9
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
10
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OURiMjUwY21GamRHVmtRbXh2WTJzdVoybG0%3D.jpg?w=700&webp=1)
11
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpGTjFZa0pzYjJOclUzUmhjblF1WjJsbQ%3D%3D.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OURiMjUwY21GamRHVmtVM1ZpUW14dlkyc3VaMmxt.jpg?w=700&webp=1)
12
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
13
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpGTjFZa0pzYjJOclJXNWtMbWRwWmc9PQ%3D%3D.jpg?w=700&webp=1)
14
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
第8行,鉴于这是一个例子为了简便起见使用了“*”代替了具体的类,编写程序时还是需要培养良好的习惯引入相应的类,避免出现冲突。
这个类很简单,只是把请求传递到一个在Struts中命名为“success”的forward对应的页面,具体请看下面列出的struts-config.xml当中的配置。
然后是输入表单的JSP页面:input.jsp
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OURiMjUwY21GamRHVmtRbXh2WTJzdVoybG0%3D.jpg?w=700&webp=1)
2
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
3
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
4
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
5
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
6
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
7
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
第1行引入了Struts的html标签库
请注意第4、5行,如果使用传统的ActionForm,property的值应该与ActionForm里面的一个私有属性的名称对应,但在这里,请回忆上述ActionForm中的Getter和Setter方法,分别带有一个参数和两个参数,这里的property会通过反射机制自动调用Setter方法,“value(a)”中的“value”就是ActionForm中Map的名称,而括号当中的“a”,就是我们动态产生的表单域的名称,它对应Getter方法中的第一个参数“key”,而用户在表单输入的值就对应Setter方法中的第二个参数“value”。
这里,我们分别动态创建了两个名为“a”和“b”的表单域,存放到Map中。
然后,我们看看success.jsp即Action转发到的页面
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OURiMjUwY21GamRHVmtRbXh2WTJzdVoybG0%3D.jpg?w=700&webp=1)
2
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
3
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
4
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
第1行引入了Struts的bean标签库。
请注意第2行,引用了名为“test”的ActionForm(详细设置请看struts-config.xml)。这标签的作用是显示输出ActionForm的指定属性值。请注意property,“value”就是ActionForm中Map的名称,它通过反射机制自动调用ActionForm的Getter方法,请回忆上述ActionForm中的Getter方法,带有一个参数“key”,这里的“a”,“b”实际上是对应刚才输入页面动态产生的两个表单域属性名。这里实际是要显示名为“test”的ActionForm的名为“value”的Map类属性中的“key”分别为“a”和“b”的对应的“value”。
通过这样的设计,我们就完成了动态产生表单域属性的功能,这个设计的好处是你并不需要修改ActionForm,就能随意设计你的表单域属性,也大大减少了ActionForm的编码量。
最后,让我们来看看struts-config.xml中的相应配置(只列出相关配置片断):
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
2
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlpHOTBMbWRwWmc9PQ%3D%3D.jpg?w=700&webp=1)
3
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
4
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
5
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
6
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlpHOTBMbWRwWmc9PQ%3D%3D.jpg?w=700&webp=1)
7
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
8
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
9
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
10
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
11
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
12
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlpHOTBMbWRwWmc9PQ%3D%3D.jpg?w=700&webp=1)
13
![Map作为ActionForm的属性,动态增加ActionForm的“属性” Map作为ActionForm的属性,动态增加ActionForm的“属性”](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwzZHlhWFJsWW14dlp5NWpjMlJ1TG01bGRDOUpiV0ZuWlhNdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)