两种方法:
一种是在持久层获取所有页面需要的数据,组合成一个大的数据对象,传给界面,这样需要写复杂的sql语句,与面向对象的设计原则不太相符,但是简单实用,速度快。但数据库结构变化将带来非常严重的后果,你会发现你不得不从持久层一直改到表现层。
另外一种就是在业务逻辑层组装,通过调用不同的数据访问对象来获得不同表中的数据,这样一个DAO可以对应一个表,设计比较明晰,但是可能会产生效率问题。

解决方案 »

  1.   

    我是这样做得:public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response)
    throws Exception { EmployeeForm employeeForm = (EmployeeForm)form;
     Bean bean = new Bean(); bean.initForm(employeeForm);
     
     return 想去得页面}Bean{
     
      public void initForm(EmployeeForm ef)
      {
                 //从数据库中取出值,然后set到form中去
      }
    }
      

  2.   

    这些"只读"的信息最好cache了,不要每次都查
      

  3.   

    flyingbug, romeo:
    你们大概意思是这样的吧:
    在forward到addemployee.jsp之前,还要另加一个InitEmployeeForm之类的Action,准备好depts,ranks等数据,为addemployee.jsp中的表单所用。
    我试试,多谢
      

  4.   

    我觉得像你这样的要求应该把这种逻辑放在数据库一端。写一个关乎逻辑的SQL或过程都可以解决。
    关于性能的问题也可以交给数据库端解决。
      

  5.   

    flyingbug, romeo:
    你们大概意思是这样的吧:
    在forward到addemployee.jsp之前,还要另加一个InitEmployeeForm之类的Action,准备好depts,ranks等数据,为addemployee.jsp中的表单所用。
    我试试,多谢
    =============================没错,我们公司都是这么搞的,
      

  6.   

    在打开addemployee.jsp页面时,
    先调用Business类,然后在DAO中分别取出depts,ranks需要的数据
    得到这两个数据的对象以后,就可以按你的要求在前台显示让用户选择了。
    并且数据库连接也是在Business中建的,为了取这两个数据新建一个action似乎没什么必要哦。
      

  7.   

    ratduck,你是说在addemployee.jsp页面中直接操作Business类,DAO什么的?
    这样不好吧??
      

  8.   

    不是阿,只是在jsp直接调用Business类的一个方法,jsp页面也不用建立连接阿
    至于dao是Business调的,也已经跟jsp分开了
      

  9.   

    action类是当有数据提交时才用到的,
    比如在action里还可以对数据做一些转换,其他处理之类。
    如果没有提交的话,这一步可以省略掉的哦。
      

  10.   

    flyingbug, romeo:
    你们大概意思是这样的吧:
    在forward到addemployee.jsp之前,还要另加一个InitEmployeeForm之类的Action,准备好depts,ranks等数据,为addemployee.jsp中的表单所用。
    ------------------------------------------------这样感觉还可以,
      

  11.   

    《Java Web 编程指南》第18章的Struts例子处理这种问题非常好,是采用一个自定义标签来加载这些公共数据。在需要这些数据的JSP中,只需要把这个自定义标签加上去就行了。
      

  12.   

    这帖子都这么长了...
    我说的是数据的穿过系统的方式
    其实这些问题的根源都是来自于对象模型和关系模型对数据之间关系的表达方式不同
    所以在程序中至少要在一个地方进行转换至于是不是要另外加一个Action来专门处理这些数据
    至少这个我们不是这么用的
      

  13.   

    kui(kui)
    《Java Web 编程指南》第18章的Struts例子处理这种问题非常好,是采用一个自定义标签来加载这些公共数据。在需要这些数据的JSP中,只需要把这个自定义标签加上去就行了。----------------------------------------------------------------想学学这种方法,不知道哪有这本书下载?找了半天没找到。
      

  14.   

    看来基本有两种做法:
    一种是通过一个Action将数据准备好;
    另一种方法是如ratduck, kui的说法,通过一个自定义的标记来实现。
    thx...