jsf跳转无响应解决方案

编写了一个框架:j2ee5    jsf1.2+spring2.0+hibernate3.0,采用oracle10g数据库,以tomcat5.5.35作为web容器,web.xml配置如下:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>webItem</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
   <listener>
  <listener-class>
   org.apache.myfaces.webapp.StartupServletContextListener
  </listener-class>
 </listener>
</web-app>

         可是点击index.jsp页面的按钮时,总是无法完成跳转,这个事情纠结了一个星期了,突然看见一篇文章说jsf1.2必须在tomcat6级以上版本上才能运行,所以把项目重新部署到   tomcat6.6.36上边,仍然是不能跳转,继续查阅资料,某些文章提到:tomcat的某些版本确实不稳定,不能完成jsf页面跳转,所以又换了几个tomcat6试试,结果终于在tomcat6.6.20能够进行跳转了。jdk用的是1.6;

   但是跳转之后又有报错不能找到类com.sun.faces.taglib.jsf_core.ViewTag和javax.faces.application.ApplicationFactory,原因是这样的,项目中我采用的是myfaces实现,jsf实现方式有JSF参考实现(RI)和myfaces实现,两种方式都实现了jsf,且都具有javax.faces.application.ApplicationFactory这个类,所以产生了冲突,解决方法就是删掉jsf的参考实现jsf-api.jar和jsf-impl.jar;com.sun.faces.taglib.jsf_core.ViewTag本来是jsf-impl.jar里的类,现在删除了jsf-impl.jar自然会报找不到类,怎么解决呢?是这样的,com.sun.faces.taglib.jsf_core.ViewTag是默认的解读标签的类,在j2ee5的包中始终存在jsf-api.jar和jsf-impl.jar,即使你删除了项目中的jsf-api.jar和jsf-impl.jar也不够,现在我们还得把j2ee5里的这两个jar包也删除掉,步骤如下(我使用的是myeclipse10):windows--->preference--->MyEclipse--->java EnterPrise Project--->library sets--->j2ee5,删除掉jsf参考实现(RI),即jsf-api.jar和jsf-impl.jar,加入myfaces实现myfaces-api.jar和myfaces-impl.jar;为保险起见我还把myeclipse安装目录下的这两个jar包也替换掉了,都换成myfaces实现,路径是:C:\Program Files\MyEclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\data\libraryset\EE_5;删除掉web-inf下的class编译文件后,重新再编译一遍,ok 运行错误NoClassDefFoundError: com.sun.faces.taglib.jsf_core.ViewTag不再出现。记住:jsp页面引入标签的时候

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>

这个三个都必须引入,如果只引入前两个仍然会报NoClassDefFoundError: com.sun.faces.taglib.jsf_core.ViewTag。

项目中进行spring注入的时候,进行业务逻辑代码书写的时候,

java类

UserDaoImpl userdaoimpl;

public UserDaoImpl getUserdaoimpl() {
 return userdaoimpl;
}

public void setUserdaoimpl(UserDaoImpl userdaoimpl) {
 this.userdaoimpl = userdaoimpl;
}

applicationContext.xml

<bean id="userdaoimpl" class="com.test.service.UserDaoImpl">
<property name="userdao" ref="userdao"></property>
</bean>

傻呵呵的以为spring已经在我的业务类中注入了数据库操作对象直接就能拿着用呢,但是总是在报空指针异常,苦思冥想也不明白明明是spring已经注入过了,为什么就没有呢,查阅别人做的项目才发现,这些个注入对象都存在context中,你得自己去取,要不然,肯定是空的,因为业务逻辑类里头只是一个类的声明而已,还得写一个这样的类:public class managerService {
 private static final ApplicationContext ctx = FacesContextUtils
 .getWebApplicationContext(FacesContext.getCurrentInstance());
 public static Object getBeanByname(String beanName) {
 return ctx.getBean(beanName);
}
}

通过userdaoimpl=(UserDaoImpl)managerService.getBeanByname("userdaoimpl");才可以从文件中得到这个对象的。

我正在初步学习阶段,这篇文章,只是本人为了以后不忘记怎么处理此类问题而写的,希望各位大神多多批评指教!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值