我的表单有一个参数,包含一个数据的网格/表格(通过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"/>
有人可以指出我在这里做错了吗?
答案 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"/>