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

Blu*_*hin 1 checkbox struts actionform

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

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

第1项第2项

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

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

我试图添加getMyitem1(),setMyitem1(字符串[]项),getSelectedMyitem1(),setSelectedMyitem1(字符串[]项)

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

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

请指教,谢谢.

小智 6

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

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

现在,绑定是基于名称完成的; 与表单中属性名称匹配的请求参数的名称.请求参数的名称当然是您提交的HTML表单中输入字段的名称.

例如,如果您使用名称提交输入test,则应在操作表单类中具有以下访问者(这些访问者遵循名为的属性的JavaBeans约定test):

public void setTest(String val) { ... }
public String getTest() { ... }
Run Code Online (Sandbox Code Playgroud)

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

public void setTest(String[] val) { ... }
public String[] getTest() { ... }
Run Code Online (Sandbox Code Playgroud)

但同样,该名称用于匹配,始终是名称.

不确定您要对项目1项目2做什么.这些是为您的输入提交的值(相当于test)吗?