Struts 2验证向列表添加字段错误

时间:2012-09-11 15:40:08

标签: java validation struts2 ognl

我的表单有一个参数,包含一个数据的网格/表格(通过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
}

这是GridData:

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"/>

有人可以指出我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

首先,fielderror标记的正确用法是<s:fielderror fieldName="some_field_name"/>。 some_field_name必须是String而不是表达式http://struts.apache.org/2.x/docs/fielderror.html

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

中的fieldError映射
相关问题