页面请求一个action 
该action里有个方法getUser() 返回一个User对象
public User getUser(){//查询数据库}
但是页面引用该User对象的属性时,引用几次就查询了几次数据库,是不是哪里写的不对?该怎么改?
<s:property value="user.xxx"/>页面这样用的

解决方案 »

  1.   

    方法换个名字是不是和 user对象的getter方法重名的关系引起的
      

  2.   

    忘记说了,那个方法是查询得到User的信息的 该名字没用,因为页面上用
    <s:property value="user.xxx"/>  这里的user.xxx前面的user是getter方法名
      

  3.   

    也就是说页面用的user对象是这个方法返回的值,但是为什么会引用几次属性就重新查数据库呢
      

  4.   

    你的查询数据库放在getUser(){}里面的????那当然是引用一次就查一次了,<s:property value="user.***"/>
    每次读到这个语句,它都会调用一次getUser(){}方法来获得user。
      

  5.   

    struts2里面,你用<s:property>的时候,会调用action里相应的getter,你的getter方法里面有访问数据库的代码
      

  6.   


    此正解,你的查询要与getUser分离
      

  7.   

    分离?那写到哪里好呢?
    execute方法里?或者是那里?
    谢谢大家指教
      

  8.   


    1.action中定义一个User类型的变量,比如:private User user;然后增加它的get和set方法;
    2.在execute方法中查询数据库,将查询结果赋给的user对象,在页面就可以直接引用这个user了,是通过它的get方法获得的。
      

  9.   


    恩,放在exectute方法里面可以,写在自己定义的方法里面也可以,假如你建了个xxxAction(某个地方你激活了这个action),里面就是你连接数据库,查询数据库的方法,然后把查询出来的结果赋给你的user就ok了
      

  10.   


    当然是在execute方法里调用业务代码了 写好处理数据库的类 如UseDao 
    然后在Action的execute方法中调用UseDao的业务代码 
    如:UserDao userDao = new UserDao();
        List list = (User)userDao.getUserDate(user.Id);
        Map session = ActionContext.getContext().getSession();
        session.put("user",list);
        return success;楼主 OK?
      

  11.   

    我kao  结贴了 没占到光啊