刚学ssh整合。   以前struts+hibernate的时候在jsp页查询数据我都是用dao直接查出来的,那现在用了spring了,JSP页没有service注入,就不能调用service查询,也不能调用dao查询,因为他们都需要注入的。那现在JSP页用什么查询数据呢?有朋友说放action中
查了后放入request.setAttribute(,,) 这样,可是并不是每个页面都经过action的啊!
   
  那种不在struts管理范围,但又需要显示数据的页面用什么查询呢?比如一个
ListNews.jsp这样的展示页面,不在STRUTS流程中,而且还要翻页什么的,更不能指望用ACTION了吧,import的service和DAO都不能用了(没有注入),难道还得用老方法写个不在SPRING管理范围的DAO查询DB吗?那不是又回到老路上了?!   JSP页如何查询数据?请说说具体的解决方案.

解决方案 »

  1.   

    有没搞错?没什么好的方法吗?每个页面都经过ACTION?
    都用TAG?似乎这样效率又会降低呢 如何是好
      

  2.   

    没弄清楚,为什么不能用Action了,翻页好像也可以用吧!
    至于读取数据,可以用JSTL啊;至于效率嘛,本人觉得对效率没有特殊要求的,略微牺牲那么点点,不算大问题吧
      

  3.   

    翻页界面做成一个back bean就OK了
    加一个param.page参数
      

  4.   

    我知道能用ACTION翻页的,只是尚不习惯放弃JSP直接用DAO的习惯,又找不到其他好方法,效率,这个好像许多虚拟主机提供商(为入门用户准备的解决方案)都不让用SPRING,是不是因为太占资源了?我想知道大家平时做项目时候是用哪种方法?JSTL ? TAG ? 还是全放ACTION中?
      

  5.   

    给我推荐一种SSH项目中最普遍的JSP查询DB的方式吧!
      

  6.   

    <%
    WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(application);
    UserService userService = wac.getBean("userService");List users = userService.find();%>
      

  7.   

    直接从页面访问数据库最好用ajax,具体咋作自己研究把,我也刚开始看
      

  8.   

    怪了,如果你在JSP里用DAO查询数据库,那你还要STRUTS干什么
    一般是ACTION(或者再封装一曾)去操作DAO,获得数据结果集传给JSP进行显示的。很少见到有人在JSP里操作DAO的
      

  9.   

    freedom2001(天翔) 我知道你说的模式 但并不是所有JSP都适合被ACTION过去的,直接操作DAO并不少见,不然“悲叹公司的代码质量”这种帖子也不会非常受欢迎了,它在JAVA架构分论坛中dreamover(梦醒了〖http://hellfire.cn〗) 的方式好像不错,待我验证一下
      

  10.   

    其实这个问题应该是:   如何在jsp中获得并调用spring管理下的bean?
      

  11.   

    WebApplicationContext
    WebApplicationContextUtils
    在jsp页无法解析,需要引入什么呀?
      

  12.   

    <%page import="org.springframework.context.ApplicationContext"%>
    <%page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
    UserDao userDao = (UserDao)ctx.getBean("userDao");
    List list = userDao.getUsers();
      

  13.   

    zjf405(浪子阿飞) 的实用啊那么下面的有什么区别啊?一:
    ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");二:ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());三:ServletContext servletContext = request.getSession().getServletContext();   
    WebApplicationContext wac = WebApplicationContextUtils.   
                getRequiredWebApplicationContext(servletContext);   什么区别啊?
      

  14.   

    to LZ:
    第一个是比较通用的获得spring上下文的一个类,它的参数是文件所在本地系统的路径,它不仅可以用于b/s的web应用程序,也可以应用于c/s的桌面程序,如果你在web应用中采用这种方式的话,没有指定配置文件的绝对路径,它默认是从tomcat/bin目录去加载(如果你用的tomcat作为你的web server的话^_^)
    第二个是web应用程序专用的一个获得spring上下文的一个类
    第三个不就是和第二个类似吗(我觉得)^_^
      

  15.   

    试通了。感谢大家帮忙,散分!在JSP里调用spring管理的bean应该是这样:一:web.xml配置 <servlet>
    <servlet-name>context</servlet-name>
    <servlet-class>
    org.springframework.web.context.ContextLoaderServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value>

    </context-param>二:在JSP<%@ page import="org.springframework.context.ApplicationContext"%>
    <%@ page import="org.springframework.web.context.support.WebApplicationContextUtils"%><%@ page import="com.yourcompany.service.CategoryService"%><%
    //上面的CategoryService引用是我自己的东西
    //applicationContext.xml中一定要有完整的依赖链,从dataSource到CategoryServiceApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());CategoryService cs = (CategoryService) ctx.getBean("CategoryService");List list =cs.getCategoryDAO().findAll();%>
      

  16.   

    ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext();
    或者
    ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext();这是在action以外的地方拿ApplicationContext的方法,需要的参数是:ServletContext,在request.getServletContext里能拿到,所以只要有request就能拿到spring配置文件里的bean.这种方法通常在写组件时用,比如写个自定义标签,正常的流程,最后都走action,尽量保证每个请求都给一个.do,而不是直接去一个JSP,这样既保证了MVC模式,又防止用户直接记下JSP地址在没有后台准备情况下访问。
      

  17.   

    非常感谢楼主,我这两天在把一个struts的网络购物商城改造成ssh,遇到这样的问题,就用你总结方法啦