这个是helloapp中的表单验证中的一个程序片断:
public   ActionErrors   validate(ActionMapping   mapping,HttpServletRequest   request) 
{     ActionErrors=new   ActionErrors(); 
      if((userName==null) &brvbar; &brvbar;(userName.length() <1)) 
              errors.add("username",new   ActionMessage("hello.no.username.error")); 
      reyurn   errors; 

if((userName==null) &brvbar; &brvbar;(userName.length() <1))这个判断方法里面的两项不是一样的吗? 什么情况下会出现null的情况啊?位置颠倒一下可以吗?高手答一下呀
(注:此方法是sun的官方关于struts的官方例子) 

解决方案 »

  1.   

    不一样,如果出现null的情况,就是说你的textbox或者其他的什么没有付初始值,比如value=""
      

  2.   

    &brvbar;这是什么???有可能是||.
    给你的回答是不可以.
    因为得到userName后,首先应该判断是不是等于null,如果不是,那么应该判断他是不是为空,即userName.length()<1.
    如果倒过来的话,先执行userName.length()<1,一旦userName==null,那么就会出现异常的.
    而现在这样写的话,如果userName==null了,也就是说条件已经有一个成立了,那么后面userName.length()<1就不会被执行了.
      

  3.   

    声明了对象没有初始化 null
    没有赋值 userName.length()   <1
      

  4.   

    怎么能为空呢?username=null?这个例子很简单,就是在文本框里输入东西,然后页面输出一个hello<name>,username是属性值,发生判断的原因就是一上去点submit,这根本也出现不了null啊?
      

  5.   

    不一样啊
    null和空字符串就不一样啊
    如果是null肯定不会出现空字符串了,后边就不用判断了
    所以这么写是最有效率了
      

  6.   

    简单点说吧楼主,在页面定义个textbox<input type="text" name="username">
    如果在form里面验证的话,username为null,如果<input type="text" name="test" value="">
    username的length=0
      

  7.   

    你不是用的struts的表单验证吗?把<input type="text"...这个改成<html:text property="username"/><html:errors property="username"/>
      

  8.   

    userName==null这个是判断你有没有userName这个属性,也就是说你的页面写没写username这个textbox
    userName.length<1是判断你的页面userName的textbox的value是不是"",明白了么?
      

  9.   

    你说的对,但我想既然给了文本框,最坏的是没有在文本框里输入东西,直接点submit,这么一点是什么?null(没有属性值)还是length<1(有值?空值?)到底空值是不是null?我这地方我不太明白?
      

  10.   

    你比如:
    1.<input type="text" name="username">
    这个时候在form表单验证的时候username=null
    2.<input type="text" name="username" value="">
    这个时候在form表单验证的时候username.length=0,username.length<1value写不写都不会报错,但是在from中却是两个不同的条件
    那个struts的例子就是判断username是否为空或者给了username初使值""后,没有写任何东西就提交了