JSF集成Spring

 转载:http://blog.csdn.net/Pointer_v/archive/2007/11/08/1874140.aspx

这博客还挺好的嘛,能上传文件,我就传我自己MyEclipse6.0测试通过的例子吧:

      /Files/cshF3220544/JSFSpring.rar

步骤:

 第一步:建立项目

 第二步:配置好JSF,确保JSF程序可运行。

 第三步:配置好Spring,确保Spring可用。

 第四步:下载jsf-spring.jar,到网上很容易找到。

 第五步:修改web.xml:

      1.如果你的Spring还没配置org.springframework.web.context.ContextLoaderListener则首先要配置:

            <listener>
              <listener-class>
                     org.springframework.web.context.ContextLoaderListener
              </listener-class>
             </listener>

      2.配置de.mindmatters.faces.spring.context.ContextLoaderListener

            <listener>
              <listener-class>
                    de.mindmatters.faces.spring.context.ContextLoaderListener
              </listener-class>
            </listener>

      注意:上面两者顺序不能乱。

      3.最好在加入下面的listener顺序没影响

            <listener>
              <listener-class>
               org.springframework.web.context.request.RequestContextListener
              </listener-class>
            </listener>

      否则会报下面的错:

      

exception

org.apache.jasper.JasperException: javax.servlet.ServletException: /admin/login.jsp(16,4) '#{PersonBean.loginName}' de.mindmatters.faces.spring.factory.BeansEvaluationException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'PersonBean': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request? If you are actually operating within a web request and still receive this message,your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:541)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.jsha.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:57)

 

root cause

javax.servlet.ServletException: /admin/login.jsp(16,4) '#{PersonBean.loginName}' de.mindmatters.faces.spring.factory.BeansEvaluationException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'PersonBean': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request? If you are actually operating within a web request and still receive this message,your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
	org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:694)
	org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:665)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:56)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.jsha.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:57)
控制台上的错误不太一样
java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request? If you are actually operating within a web request and still receive this message,your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
 at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:102)
 at org.springframework.web.context.request.SessionScope.get(SessionScope.java:88)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:283)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
 at de.mindmatters.faces.spring.factory.DelegatingVariableResolver.resolveVariable(DelegatingVariableResolver.java:101)

 

posted @ 2009-05-28 00:19  死循环  阅读(2641)  评论(0编辑  收藏  举报