有2种方法:
1.通过validateX实现
public void validateAdd() {
if(msg.getTitle()==null||"".equals(msg.getTitle())) {
this.addFieldError("title", "标题不能为空");
}
if(msg.getContent()==null||"".equals(msg.getContent())) {
this.addFieldError("content", "内容不能为空");
}
}
public String add() {
return "success";
}
public String addInput() {
return "success";
}
执行顺序:addInput-validateAdd-add
如果验证不通过,就会在添加错误信息到FieldError,在执行add之前发现FieldError有值,就会返回input,跳转到Input界面,所以struts.xml要这样写
<action name="*_*" class="action.{1}Action" method="{2}">
<interceptor-ref name="AuthStack"/>
<result>/WEB-INF/{1}/{2}.jsp</result>
<result name="input">/WEB-INF/{1}/addInput.jsp</result>
</action>
注意:add-validateAdd add要变成Add!
2.用验证文件校验
(1).在action包中创建XX-validation.xml(xx为action类名)
<validators>
<field name="title">
<field-validator type="requiredstring">
<message key="title不能为空"/>
</field-validator>
</field>
<field name="content">
<field-validator type="requiredstring">
<message key="content不能为空"/>
</field-validator>
</field>
</validators>
由于有ModelDriven 写title他会自动校验msg.title,写content他会自动校验msg.content
附:struts常用校验器:
注意:要想把FieldError在页面显示,就要用struts的标签
<s:form action="Message_add" method="post">
<s:textfield key="message.title" name="title"/>
<s:textfield key="message.content" name="content"/>
<s:submit value="提交"/>
</s:form>
注意(1):不需要国际化就用lable,如果想要实现国际化,就用key=“”
(2):<s:xx name="">其中的name是与action中msg属性对应的,通过setter(setName)进行赋值
(3):如果想集中显示错误信息,可以使用<s:fielderror/>
(4):如果想显示某一条错误信息,可以使用<s:fielderror fieldName="id"/>