1

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

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

项目 1 项目 2

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

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

我尝试添加 getMyitem1()、setMyitem1(String[] items)、getSelectedMyitem1()、setSelectedMyitem1(String[] items)

这些设置方法仅在页面加载时调用。

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

请指教,谢谢。

4

1 回答 1

6

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

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

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

例如,如果您使用 name 提交输入test,您的操作表单类中应该有以下访问器(遵守 JavaBeans 对属性 named 的约定test):

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

如果您有一个附加到test参数的值列表(我认为这是您的情况,因为您提到了复选框列表),则访问器将更改为数组类型:

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

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

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

于 2010-04-20T14:03:14.213 回答