JSF学习--JSF2组件与Tomcat9.*容器兼容的配置问题
来源:互联网 发布:云南省扶贫大数据平台 编辑:程序博客网 时间:2024/06/05 22:39
一、前言
最近在做某个项目时,使用到JSF2与tomcat9.0服务器,可是,JSF的很多标签(JSF组件)无法在浏览器中显示出来。tomcat服务器的后台提示信息太少,这个问题就托了很久,查询了好多资料,直到今天才解决。
二、问题描述
2.1 开发环境
JSF2.1 + Tomcat9.0 + maven
2.2 问题详述
- 如下面index.xhtml的代码:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"><h:head></h:head><h:body> <h1>DBConnection Demo</h1> <h:form> <h:commandButton value="TESTConnect" action="#{controller.connectDB}" /> </h:form></h:body></html>
2.选择JSF映射.jsf,可是在浏览器中访问该页面时无法显示command这个JSF标签。
如下图所示:
三、原因分析
3.1 JSF与容器
首先需要明确一点:JSF,JavaServer Faces,它是以组件为中心来开发 Java Web 用户界面的方法。因此,在使用JSF进行开发时需要建立一种组件的概念,在这种开发中,所有的JSF组件是由容器来负责管理的,包括组件的创建、管理、维护、使用以及销毁。常用的容器有Tomcat、Wildfly 、Glassfish等。
3.2 JSF与tomcat
在以前的学习中我们知道,wildfly1.0是默认支持JSF2.0的。可是在这里的Tomcat9.0中,没有默认支持JSF2.0,所以,我们需要手动添加JSF2.0的Tomcat9.0的支持。
四、问题解决
4.1 查看$tomcat/lib目录下是否有JSF的jar包
如下图:
正常情况下是没有框中的两个JSF的jar包的。
- jsf-api-2.1.jar
- jsf-impl-2.1.jar
4.2 手动添加相关jar包
可以手动下载适合版本的JSF的jar包,(上面所列)然后手动添加到Tomcat安装目录的lib目录下即可。
4.3 在pom文件中添加jsf-api和jsf-impl依赖
然后需要在maven的pom文件中添加相关依赖。
<!-- jsf2 api --> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.1.13</version> </dependency>
<!-- jsf2 impl --> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>2.1.13</version> </dependency>
五、问题解决过程中遇到的问题及解决方法
5.1 问题1: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/faces/webapp/FacesServlet
解决方法
将pom文件中的关于javaee的依赖配置全都替换为javaee-api并将scope设置为provided。
<!-- javaee-api --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency>
5.2 问题2:Target Unreachable, identifier resolved to null in JSF 2.2
解决方法
在pom中添加以下两个依赖:
<!-- jsf2 api --> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.1.13</version> </dependency>
<!-- jsf2 impl --> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>2.1.13</version> </dependency>
六、参考资料
1.http://stackoverflow.com/questions/15948598/classformaterror-absent-code-attribute-in-method-that-is-not-native-or-abstract
2.http://stackoverflow.com/questions/20504611/target-unreachable-identifier-resolved-to-null-in-jsf-2-2
- JSF学习--JSF2组件与Tomcat9.*容器兼容的配置问题
- JSF richfaces的dataTable组件中filter在IE和Firefox下不兼容的问题
- JSF的组件问题调解
- jsf2.0---jsf的新特性
- Tomcat9.0安装与配置
- eclipse配置Tomcat9.0时遇到的问题
- Spring与JSF2的整合配置的整理
- 【Tomcat9源码分析】组件与框架概述
- tomcat9的安装及配置
- 关于JSF2中自定义组件处理表单值的一些问题
- Tomcat9配置
- 配置Tomcat9
- PrimeFaces 3.0发布:面向JSF2的Ajax、移动与IE 9组件
- 常用的JSF组件
- JSF组件的创建
- Tomcat9.0的安装及配置
- iis6 元数据库与iis6 配置的兼容 出错问题
- JSF框架opermasks中时间组件兼容ie9的笔记心得
- XMLHttpRequest发送请求和获取响应
- 聊聊架构(2)
- 读书笔记《Effective C++》条款09:绝不在构造和析构过程中调用virtual函数
- android 串口通讯
- Canvas之drawPath
- JSF学习--JSF2组件与Tomcat9.*容器兼容的配置问题
- 反向传播算法(过程及公式推导)
- Easy-24
- react demo5 (自定义react复合组件)
- 设计模式中关系在代码中的体现
- Java字符串排序(低位优先排序,高位优先排序)
- {福利}C++初学
- Myeclipse2016如何关掉浏览器小菜单
- [Java] 的四种引用,强弱软虚,用到的场景