cst00000 2009-12-05 14:54 采纳率: 0%
浏览 439
已采纳

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条回答 默认 最新

  • wocsok 2009-12-05 15:48
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?