在我阅读的每个涉及 struts2 验证或工作流拦截器的教程中,给出的示例都是非常基本的,并且假设每个表单字段都有一个固定的名称,并且在 .jsp 文件中进行了预定义。例如:
<s:form method="post" validate="true">
<s:textfield label="Name" name="name"/>
<s:textfield label="Age" name="age"/>
<s:textfield label="Favorite color" name="answer"/>
<s:submit cssClass="btn btn-primary"/>
</s:form>
但是,我目前有一个使用 javascript 动态创建的表单。当页面加载时,ajax 用于从数据库中获取国家列表(以及这些国家的元数据)。一个下拉框填充了这些国家的名称。对于每个国家/地区,将生成一些输入字段并将其添加到 DOM,但在选择国家/地区之前,这些字段将保持隐藏状态。这些输入具有 id,例如:
france_extra_data_1
france_extra_data_2
france_extra_data_3
germany_extra_data_1
germany_extra_data_2
america_extra_data_1
america_extra_data_2
america_extra_data_3
america_extra_data_4
... and so on
当用户选择一个国家(例如美国)时,将显示名称中包含 id 的输入。其他人仍然隐藏。美国国家并不总是有与之关联的确切 4 个输入。所有输入都是在现场生成的,而不仅仅是在选择适当的国家/地区时生成的原因是因为所有输入都有一个占位符文本,我不想每次都从数据库中获取这些数据,而只是在页面加载时获取一次。
问题是当我想用 struts2 验证这个表单时。验证器需要知道字段的名称,但我事先不知道会有多少输入(取决于数据库),我也不知道应该验证哪些字段以及应该忽略哪些字段(在上面的示例中,只有输入带有 id 的美国)。
struts2框架能解决这个问题吗?
我已经读过这个问题:struts2 中字段验证器的动态字段名称,但我不需要访问者字段验证器!