struts 1.X ActionForm如何处理纯html复选框列表?

时间:2010-04-20 01:30:55

标签: checkbox struts actionform

我正在处理一个使用struts 1.2的旧应用程序。出于某种原因,我们使用纯html表单提交struts动作。例如:

对于testAction.do的内容输出,我尝试提交给自己。

 第1项  第2项

然后我将表单bean TestForm与testAction相关联。

我不确定如何在表单中指定属性,以便在用户点击“提交”后获取myitem1中的值

我试图添加 getMyitem1(),setMyitem1(String [] items),getSelectedMyitem1(),setSelectedMyitem1(String [] items)

只有在加载页面时才会调用这些set方法。

我想我对struts 1.x中的ActionForm的理解一定是错的。

请指教,谢谢。

1 个答案:

答案 0 :(得分:6)

首先,让我们澄清一下Struts如何管理表单提交:

  • 您使用HTML表单向操作提交了一些值(在这种情况下,操作是Struts操作,通常是* .do);
  • 由于ActionServlet(在web.xml中指定),Struts接收请求;
  • 根据您在struts-config.xml文件中指定的信息,选择一个特定的Action类(与您的请求匹配的类);
  • 根据已识别的操作获取操作表单(同样基于您在struts-config.xml中指定的信息);
  • 创建或回收此ActionForm的一个实例(基于表单的范围:request vs session);
  • 来自请求的
  • 数据绑定到表单属性;
  • 使用此表单对象调用您的操作execute(...)方法。

现在,绑定是根据名称完成的; 格式的属性名称匹配的请求参数的名称。请求参数的名称当然是您提交的HTML表单中输入字段的名称。

例如,如果您提交名为test的输入,则您的操作表单类中应具有以下访问者(尊重名为test的属性的JavaBeans约定):

public void setTest(String val) { ... }
public String getTest() { ... }

如果您有一个附加到test参数的值列表(我假设您提到复选框列表就是这种情况),访问者将更改为数组类型:

public void setTest(String[] val) { ... }
public String[] getTest() { ... }

但是再次该名称用于匹配,始终是名称。

不确定您要对项目1项目2执行的操作。这些是为您的输入提交的值(相当于test)吗?