struts2表单验证 jsp页面显示不了错误信息
目前正在用struts2创建项目 为了减小代码的耦合度 使bean类更纯粹点 在表单验证这一块 我另外写了一个类 然后用模型驱动(ModelDriven) 再重写validate方法
[code="java"]
package com.pp.action.login;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.pp.bean.Login;
public class myvalidation extends ActionSupport implements ModelDriven
{
private Login login = new Login();
private String mailname;
private String username;
private String password;
public Login getModel()
{
return login;
}
@Override
public void validate()
{
// System.out.println("validate");
// mailname = login.getMailname().trim();
// username = login.getUsername().trim();
// password = login.getPassword().trim();
// System.out.println("mail"+mailname);
// System.out.println("username---"+username);
// System.out.println("password---"+password);
if(login.getMailname().equals(""))
{
this.addFieldError("mailname","mail name should not be blank!");
System.out.println("mail validate");
//this.addActionError("mailname should not be blank!");
}
if(login.getMailname().length()<1)
{
this.addFieldError("mailname","length error");
System.out.println("mail length validate");
//this.addActionError("length error");
}
if(login.getUsername().equals("") || login.getUsername().length()<6 || login.getUsername().length()>12)
{
this.addFieldError("username","username should not be blank!");
System.out.println("username validate");
//this.addActionError("username should bot be blank");
}
if(login.getPassword().equals(""))
{
this.addFieldError("password","fill your password");
System.out.println("password validate");
//this.addActionError("fill your password");
}
}
@Override
public String execute() throws Exception
{
return SUCCESS;
}
}
[/code]
后台都有显示mail validate username validate等输出信息 说明有进入判断条件 但是在JSP页面就是显示不出来错误信息
reg.jsp页面在form表单之前也有加FieldError的标签:
[code="java"]
/s:fielderror
-->
<s:textfield name="mailname" label="邮箱"></s:textfield>
<s:textfield name="username" label="用户名"></s:textfield>
<s:textfield name="password" label="密码"/>
<s:submit name="submit" ></s:submit>
/s:form
[/code]
acton如下,用的是login2来处理表单:
[code="java"]
<package name="tutorial" extends="struts-default">
<action name="login" class="com.pp.action.login.checklogin">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
<result name="login">login.jsp</result>
</action>
<action name="login2" class="com.pp.action.login.myvalidation">
<result>success.jsp</result>
<result name="input">reg.jsp</result>
</action>
</package>
[/code]
到底是什么问题 希望各位帮忙看下 非常感谢。。。
[b]问题补充:[/b]
Login类是另外写的 然后为用模型驱动ModelDriven 其中有个getModel()方法重载Login的javaBean类
首先我想说 struts2的表单验证是不是有两种:一是直接override validate方法;二是直接对Action处理类配置xml文件 不是吗
[b]问题补充:[/b]
wocsok (中级程序员)说得不对 既然是使用ModelDriven,它的作用就像是在Myvalidation里面写了Login类的getXX和setXX方法作用是一样的。
我的问题是在原先的Login里面的validate()方法没注释掉,然后两个validate()方法冲突了,只要把Login里面的validate注释掉就OK了
嗯 我说错了 我以前自己弄的时候 经常用XML配置文件 好久不弄WEB了 一看 也没经过大脑思考 就乱来一句 对不起哦
然后是
我对你的问题的见解是这样的 eg:this.addFieldError("mailname","mail name should not be blank!"); 这句话struts2 是通过获得第一个参数的值 来传递给表单的 你把内几个域 写上set get方法 在实验下 在你的action中 这个login仿佛只是起到了 逻辑判断的作用啊
你是不是没配置验证的XML文件啊?