0

我的表单有一个参数,该参数由数据的网格/表(通过 s:iterator 呈现)以及我的操作类中表示的其他字段组成:

public class MyAction extends ActionSupport {
  private MyParameter param;

  public String execute() { ..... }
  // getter and setters 
}

这是 MyParameter 类:

public class MyParameter {
  private List<GridData> gridDataList;
  private String subParam1;
  private String subParam2;
  // getters and setters here
}

这是网格数据:

public class GridData {
  private String title;
  private String arg1;
  // etc... getters and setters...
}

我能够成功提交网格数据的值以执行一些验证。我可以通过以下方式将字段错误添加到其他参数:

super.addFieldError("param.subParam1", "subParam1 error message");
super.addFieldError("param.subParam2", "subParam2 error message");

我想做的是遍历我的列表,并将错误消息添加到列表中的每个元素。我尝试执行以下操作,但似乎不起作用:

for(int intRow=0; intRow < param.griDataList.size(); intRow++) {
  super.addFieldError("param.gridDataList[" + intRow + "].arg1", "error message");
}

然后,我使用迭代器在 JSP 中呈现了字段错误。我知道上述是可能的,因为当我在处理后检查生成的 HTML 时,该字段显示我在 JSP 中设置的“cssErrorClass”。那是:

<s:textfield
name="param.gridDataList[%{#outerStat}].data"
cssClass="grid_text_field"
cssErrorClass="error_field" maxlength="7"/>

其中 outerStat 是迭代器中设置的状态(计数器)。这会产生:

<input
type="text"
name="param.gridDataList[0].data"
class="grid_text_field error_field"
maxlength="7"/>

但是标签中没有生成字段错误消息:

<s:fielderror fieldName="param.gridDataList[%{#outerStat}].data"/>

谁能指出我在这里做错了什么?

4

1 回答 1

0

首先正确使用 fielderror 标签是<s:fielderror fieldName="some_field_name"/>. 并且 some_field_name 必须是 String 而不是表达式http://struts.apache.org/2.x/docs/fielderror.html

一种方法是访问属性标签中的 fieldError 映射
<s:property value="fieldErrors.param[%{index}].arg"/>

于 2012-09-28T14:20:56.080 回答