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:label
/s:label
/s:label

 -->

<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了

3个回答

嗯 我说错了 我以前自己弄的时候 经常用XML配置文件 好久不弄WEB了 一看 也没经过大脑思考 就乱来一句 对不起哦

然后是
我对你的问题的见解是这样的 eg:this.addFieldError("mailname","mail name should not be blank!"); 这句话struts2 是通过获得第一个参数的值 来传递给表单的 你把内几个域 写上set get方法 在实验下 在你的action中 这个login仿佛只是起到了 逻辑判断的作用啊

你是不是没配置验证的XML文件啊?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问