ssh整合过程检验文件中校验属性的编写(校验属性名称编写规则)
最近在学ssh整合,一个简单的项目:添加,删除,更新用户。
通过MyEclipse搭建好开发环境+tomcat6.0.
项目中只有一个持久化对象POJO:User。代码也很简单:
package vo;
import java.util.Date;
public class User {
private int id;
private String name;
private String password;
private Date createTime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
项目中有添加用户,删除用户,更新用户和查询用户的功能。在struts2框架中通过使用DomainModel接收参数: a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法; b.接收:通过对象的属性接收参数,如:user.Name();
addUserAction 的代码:
package action;
import java.util.*;
import model.UserModel;
import service.UserService;
import vo.User;
import com.opensymphony.xwork2.ActionSupport;
public class AddUserAction extends ActionSupport {
private static final long serialVersionUID = 7711325818603000836L;
private User user;
private UserService userService;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public String execute(){
this.userService.addUser(user);
return SUCCESS;
}
public void validate(){
Map map=this.getFieldErrors();
Set set=map.keySet();
for(Iterator it=set.iterator();it.hasNext();){
System.out.println(map.get(it.next()));
}
}
}
其中添加操作和更新操作都要通过校验才可以通过。
下面是update.jsp的表单源码:
<form action="<%=path%>/updateUserAction" method="post">
<s:hidden name="user.id" value="%{user.id}"></s:hidden>
姓名:<input type="text" name="user.name"/><br>
<br>
密码:<input type="password" name="user.password"/><br>
<br>
<input type="submit" value="更新"/>
<input type="reset" value="重置"/>
</form>
AddUserAction-validation.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.name">
<field-validator type="requiredstring">
<message>required name </message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<message>required password</message>
</field-validator>
</field>
</validators>
UpdateUserAction-validation.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>required name</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>required password</message>
</field-validator>
</field>
</validators>
完成后测试项目,添加操作没有问题,但是当进行更新操作的时候总是操作失败,当struts.xml文件对更新操作的action配置下:
<action name="updateUserAction" class="updateUserAction" method="execute">
<result name="success" type="redirect" >listUserAction.action</result>
<result name="input">update.jsp</result>
</action>
程序总是 跳转到 update.jsp 页面。但是程序没有报错。
使用了<s:debug></s:debug>标签,相关结果如下:
当struts.xml文件对更新操作的action配置下:
<action name="updateUserAction" class="updateUserAction" method="execute">
<result name="success" type="redirect" >listUserAction.action</result>
</action>
这时候更新操作表单提交出现404错误,并且程序后台报错:
No result defined for action action.UpdateUserAction and result input
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:364)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
......
后来通过 <s:debug></s:debug>标签观察,发现问题出现在校验文件 UpdateUserAction-validation.xml的配置,校验属性应该和更新页面表单中的input标签的name属性的之相同。
更改为:
<validators>
<field name="user.name">
<field-validator type="requiredstring">
<message>required name</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<message>required password</message>
</field-validator>
</field>
</validators>
重新测试,程序正常。
当后台不报错但是程序得不到想要的结构的时候,<s:debug></s:debug>标签就显得十分有用了。