问题背景:一个公交线路查询网站,用户在前台输入车次名称然后会进入搜索结果页面列出由这个车次信息所组成的几个表格。我用Struts1.2框架对上面的查询流程进行分层,用一个javabean来实现DAO层,用ActionForm来封装用户的输入并进行数据校验再转发给一个Action,这个Action主要负责根据ActionForm传来的值来调用前面Dao层的方法来完成数据库查询的操作,然后把查询得到ReslutSet通过request.setAttribute(name,value)方法来封装,最后定向到搜索结果页面上。搜索结果页面则用request.getAtttibute(name,value)方法来得到这个ReslutSet,再用JAVA脚本的while循环和for循环来得到ResultSet里所有记录的所有字段的值,最终以一个记录(即一行)为单位把值赋给一个Javascript函数,这个函数的作用是生成一个表格来显示数据到JSP页面。问题:
Q1:上面设计在显示层的问题就是java脚本和javascript脚本乃至HTML标签混杂在一起感觉很难写很混乱,是否应该采用Struts的相应标签来代替java脚本?Q2觉得在JSP页面里遍历ResultSet很麻烦,是否应该在Action里就用用集合类里的一些数据结构比如List,MapSet来取得结果集里的数据,再放到JSP页面里用javascript函数来显示?Q3:上面取值流程设计是否符合现在的一般方法?有相关经验的高手能否说一下一般这种流程应如何设计?问题不是很难,可能我描述的复杂了,就是想知道这种在数据库里取很多值情况怎么很便利的放到JSP页面来显示,谢谢!

解决方案 »

  1.   

    有STRUTS标签当然好了.从数据库取出所有的数据.最好保存在LIST里面.在页面用<LOGIC:PRENSET>判断一下有没有值.再用<LOGIC:ITERATE>来迭代输出(包括表格)
      

  2.   

    Q1和Q2答案是:是Q3的问题是,如果你按着Q1,Q2做,基本就是很流行的方法了,也是比较常用的方法。
      

  3.   

    用EL表达式觉得更简单:<c:forEach> 
    语法1:在Collection中迭代 
    <c:forEach[var=”varName”] items=”collection” [varStatus=”varStatusName”] 
    [begin=”begin”] [end=”end”] [step=”step”] 
    Body内容 
    </c:foeEach>