解决方案 »

  1.   

    那就不用struts2的验证了。直接使用javascript或者在后台验证吧,发现数据格式违法,那直接替换为默认值。
      

  2.   

    这个不是用不用struts2验证不验证的问题    现在我反正就是把属性的值注入到struts2里面去。   只是我不是正常从表单过去 的,而是我人为的在地址栏上去凑参数,例如:http://xxxxxx.com?age='aaa'      后台接收age肯定出问题呀,但是这个是直接提交的,前台没法进行数据验证的    就是struts2在接收这样参数的时候有没有处理的办法。
      

  3.   

    struts2 好像没有这样的验证方法。
    那直接在后台验证吧,拿到参数后先验证,如果格式不符合规格,就用默认值替换。
      

  4.   

    后台哪一步验证?????setter方法里面么????问题是还没有进入setter方法就已经报错了.....    
      

  5.   

    @Override
    public void validate() {
    //System.out.println("执行校验"+age);    // 这里得到的age值就不是url传递过来的字符串,而是整数的默认值0
    super.validate();
    }
    .......
      

  6.   

    想起来了,类型的原因。你定义的age是int的,却传了一个字符串过去。
      

  7.   

    把你的处理的action贴出来看看,代码放在代码框中
      

  8.   

    import com.opensymphony.xwork2.ActionSupport;public class TestAction extends ActionSupport{
    private int age;
    @Override
    public String execute() throws Exception {
    System.out.println(age);
    return super.execute();
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    }
    像下面这样传递过去的后台肯定出问题,关键是如何避免出问题呀
      

  9.   

    struts2 参数传递问题 
    看第一种方法,拦截器通过set方法自动赋值的。
    把set方法改写下,将传入的age设置为string型,然后再赋给类中的age属性。public void setAge(String age) {
         // 如果age不是纯数字,那么就给赋初值10
            if (!age.matches("^[0-9]*$")) {
             this.age = 10;
            } else {
             this.age = Integer.parseInt(age);
            }
        }楼主试试看,看能否解决问题
      

  10.   

    就算真能实现,我想也不好使。    如果属性太多,这设置的东西也太多了  
    如果正常的去写程序    一个页面跳转到另外一个页面,很容易就能处理这个问题  
    我想的是这个struts2在进行属性自动赋值的中间有没有什么东西可以配置的,去控制某个属性的值的范围的那种。
      

  11.   

    可配置的,好像就只有struts自己的那个表单验证了,剩下的想要实现什么的都要自己去写的。
    而且,像楼主的这样的例子,在正式系统中很少的,很少让用户自己在url地址栏拼参数给后台,这时,用户怎么知道给哪些参数呢?如果是表单过来的,那直接就在前台可以校验了。
      

  12.   

    哈哈,其实我觉得struts2 为我们做的已经够多的了。我们不能再懒了,改写的代码还是得写一些的。哈哈
    像你讲的设置初始值,我觉得在set方法中处理就是个不错的选择。
    也是,正常情况没有这种情况出现的。过多研究没有多大意义,如果研究透了,可以提供补丁给struts2。哈哈