调用方法添加报错信息:
public void savePubBroker(DealerPubBroker dealerPubBroker) {
Integer brokerId=dealerPubBroker.getBrokerId();
//brokerId为空代表是新增 否则为修改
if(brokerId==null){
ResultInfo<DealerPubBroker> resultInfo=pubBrokerDAO.findBrokerByCpid(dealerPubBroker.getCpId());
if(resultInfo.getResultList().size()==0){
if(dealerPubBroker.getLoginMode()==null){
throw new AppException("请选择至少一种客户标识类型!");
}else{
pubBrokerDAO.save(dealerPubBroker);
}
}else{
throw new AppException("该券商代码已使用,请重新定义!");
}
}else{
try{
pubBrokerDAO.save(dealerPubBroker);
}catch(Exception e){
throw new AppException("操作失败!");
}
} } action 中添加错误信息:
try{
pubBrokerServ.savePubBroker(dealerPubBroker);
}catch(AppException ae){
if(typeCode==null&&loginMode==null){
addFieldError("noTypeCode", ae.getMessage());
}else{
addFieldError("isUsed", ae.getMessage());
}
dois="add";
typeCode=null;
return "showAddBroker";
}
得到报错页面后:
再次提交后却不调用action了
当把action中的addFieldError("noTypeCode", ae.getMessage());注释掉 之后却可以二次提交,也调用了后台action
try{}catch(Exception e){}不到任何信息。这是为什么?我觉得是addFieldError 的问题。希望能有好心人帮忙指点,问题出在哪,在此感激各位!!
public void savePubBroker(DealerPubBroker dealerPubBroker) {
Integer brokerId=dealerPubBroker.getBrokerId();
//brokerId为空代表是新增 否则为修改
if(brokerId==null){
ResultInfo<DealerPubBroker> resultInfo=pubBrokerDAO.findBrokerByCpid(dealerPubBroker.getCpId());
if(resultInfo.getResultList().size()==0){
if(dealerPubBroker.getLoginMode()==null){
throw new AppException("请选择至少一种客户标识类型!");
}else{
pubBrokerDAO.save(dealerPubBroker);
}
}else{
throw new AppException("该券商代码已使用,请重新定义!");
}
}else{
try{
pubBrokerDAO.save(dealerPubBroker);
}catch(Exception e){
throw new AppException("操作失败!");
}
} } action 中添加错误信息:
try{
pubBrokerServ.savePubBroker(dealerPubBroker);
}catch(AppException ae){
if(typeCode==null&&loginMode==null){
addFieldError("noTypeCode", ae.getMessage());
}else{
addFieldError("isUsed", ae.getMessage());
}
dois="add";
typeCode=null;
return "showAddBroker";
}
得到报错页面后:
再次提交后却不调用action了
当把action中的addFieldError("noTypeCode", ae.getMessage());注释掉 之后却可以二次提交,也调用了后台action
try{}catch(Exception e){}不到任何信息。这是为什么?我觉得是addFieldError 的问题。希望能有好心人帮忙指点,问题出在哪,在此感激各位!!
private String password;
private String rePassword;
private String age;
private Date date;
private String email; public String getName() {
return name;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public Date getDate() {
return date;
} public void setDate(Date date) {
this.date = date;
} @Override
public void validate() {
if (name.equals("") || name == null) {
this.addFieldError("name", "姓名不能为空!");
} else if (!name.matches("[[a-z]|[A-Z]]*")) {
this.addFieldError("name", "姓名只能字母!");
}
if (!age.matches("\\d+")) {
this.addFieldError("age", "年龄必须为数字!");
} else if (Integer.valueOf(age) < 1 || Integer.valueOf(age) > 150) {
this.addFieldError("age", "年龄不符合规范!");
}
if (password.matches("") || password == null) {
this.addFieldError("password", "密码不能为空!");
} else if (!rePassword.matches(password)) {
this.addFieldError("rePassword", "两次输入的密码不同!");
}
if (!email
.matches("^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\\w]*[0-9a-zA-Z])*\\.)+[a-zA-Z]{2,9})$")) {
this.addFieldError("email", "邮箱必须符合规范!");
} } public String execute() { if (name.equals("123") && password.equals("123")
&& rePassword.equals(password)) {
return SUCCESS; } else {
return INPUT;
} } public String getRePassword() {
return rePassword;
} public void setRePassword(String rePassword) {
this.rePassword = rePassword;
}
}
看这个例子,验证都是放在action下的validate 方法
this.addFieldError 放在 validate() 下使用,其他方法下,不要使用
那么
addFieldError如果在validate()里被执行,
则会跳过execuate()直接转向INPUT 结果。你仔细看下struts2 的源码就明白了。
有没有其他方法把后端的验证错误信息提示道前端来,像.net可以直接alert 出来的那种?
我建议 你换一种方式吧。
在Action里面用字段封装错误信息,
然后在界面用EL表达式 或者是<s:property />的方式显示都可以
我和你一样的 之前用Struts2+Hibernate做的时候使用addFielderror()一点问题也没有
后来加上 Spring就出现这样的问题了!