cst00000
cst00000
2009-12-05 14:54

struts2表单验证 jsp页面显示不了错误信息

  • struts

目前正在用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条回答

为你推荐

换一换