- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建我的第一个项目 Java EE 7,但遇到了问题。感谢任何帮助。
当应用程序启动时,Tomcat 日志显示以下消息:
"validateJarFile (C:\...\build\web\WEB-INF\lib\javaee-api-7.0.jar)-jar not loaded. See Servlet 2.3 Spec, section 9.7.2. Offending class: javax/servlet/Servlet .class"
当我点击调用托管 bean 的按钮时,出现错误:
Advertência: /index.xhtml @18,66 value="#{indexMB.user}": Target Unreachable, identifier 'indexMB' resolved to null
javax.el.PropertyNotFoundException: /index.xhtml @18,66 value="#{indexMB.user}": Target Unreachable, identifier 'indexMB' resolved to null
IndexMB
@Named("indexMB")
@RequestScoped
public class IndexMB {
private String password;
private String user;
public String loginTest(){
return (this.user.equals("admin") ? "adminPage" : "inOutPage");
}
// getters and setters
}
index.xhtml
<html ...>
<f:loadBundle basename="i18n" var="bundle" />
<h:head>
<title>#{bundle['index_title']}</title>
</h:head>
<h:body>
#{bundle['index_appname']}
<br />
<h:form id="frmIndex">
<p:panelGrid columns="2">
<p:outputLabel for="user" value="#{bundle['lblUser']}" />
<p:inputText id="user" value="#{indexMB.user}" />
<p:outputLabel for="password" value="#{bundle['lblPassword']}" />
<p:password id="password" value="#{indexMB.password}" />
</p:panelGrid>
<p:commandButton action="#{indexMB.loginTest}" value="#{bundle['btn_login']}" />
</h:form>
</h:body>
faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<application>
<locale-config>
<default-locale>pt_BR</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>fr</supported-locale>
</locale-config>
</application>
这些主题对我没有帮助:
最佳答案
作为准系统 JSP/Servlet 容器的 Tomcat 不支持开箱即用的 CDI。将 jakartaee-api.jar
或 javaee-api.jar
放入 /WEB-INF/lib
只是为了获取代码是不正确的编译。 JEE API JAR 仅包含 API 类,不包含具体实现。摆脱整个 JAR。它可能会导致许多其他可移植性问题,例如此答案中描述的问题:How do I import the javax.servlet / jakarta.servlet API in my Eclipse project?您实际上应该安装具体的实现以及特定的 API。
你有两个选择:
放弃 Tomcat,转而使用真正的 Jakarta EE 容器。当您使用 Tomcat 时,只需转到 TomEE .真的很简单,download the TomEE web profile zip file ,提取它并将其集成到 Eclipse 中,就像您对 Tomcat 所做的那样。不要忘记从 webapp 中删除 Jakarta EE JAR 文件,并将项目属性中的 Targeted Runtime 属性从 Tomcat 更改为 TomEE,以便正确解析 Jakarta EE 依赖项。另见 What exactly is Java EE?
不需要额外的 JAR 或配置。您甚至可以从 Web 应用程序中删除手动安装的 JSF/JSTL/CDI/BV/JPA/EJB/JTA/JSONPJAX-RS/etc/etc 库。 TomEE 作为一个真正的 Jakarta EE 容器已经提供了所有开箱即用的功能。如果您使用的是 Maven,则以下坐标就足够了。
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-web-api</artifactId>
<version><!-- e.g. 10.0.0 or 9.1.0 --></version>
<scope>provided</scope>
</dependency>
请注意 provided
的重要性及其在“目标运行时已经开箱即用”中的含义。另见 How to properly configure Jakarta EE libraries in Maven pom.xml for Tomcat?有关 Tomcat 和普通 JEE 容器的详细 pom.xml
示例。
如果您想坚持使用 Tomcat,则需要通过 webapp 手动安装真正的 CDI 实现。以下说明假定 Tomcat 10+。 Weld是可用的 CDI 实现之一。在 the Weld installation guide您可以找到如何将其集成到 Tomcat 中的说明。为了完整性和 future 引用,以下是步骤:
对于 Tomcat 10.1.x,删除 weld-servlet-shaded.jar
of version 5.x在 webapp 的 /WEB-INF/lib
中。如果您使用的是 Maven,请使用此坐标:
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet-shaded</artifactId>
<version>5.1.0.Final</version>
</dependency>
对于 Tomcat 10.x,使用 weld-servlet-shaded.jar
of version 4.x相反:
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet-shaded</artifactId>
<version>4.0.3.Final</version>
</dependency>
可选地,在 webapp 中创建一个包含以下内容的 /META-INF/context.xml
文件:
<Context>
<Resource name="BeanManager"
auth="Container"
type="jakarta.enterprise.inject.spi.BeanManager"
factory="org.jboss.weld.resources.ManagerObjectFactory"/>
</Context>
仅当依赖于 CDI 的库尝试在 JNDI 中手动查找时才需要执行此步骤。当您使用例如 Jakarta Faces/JSF 2.3 或更新版本时,此步骤不是必需的。
在 webapp 中创建一个 /WEB-INF/beans.xml
文件来触发 CDI 的激活。它可以保持为空。
就是这样。
如果您更喜欢 OpenWebBeans 而不是 Weld 作为 CDI 实现,或者需要在 Tomcat 9.x 或更早版本中安装 CDI,请访问此博客以获取详细的 Maven 安装说明:How to install CDI in Tomcat?
关于jsf - 如何在Tomcat上安装和使用CDI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995951/
我听说最好不要从您系统的 Perl 版本所在的 CPAN 安装模块。我知道如何使用命令行安装模块,我只是想知道是否有办法将 CPAN 与系统核心 Perl 分开。 我应该: 下载源代码并专门为这些模块
我听说最好不要从系统的 Perl 版本所在的 CPAN 安装模块。我知道如何使用命令行安装模块,我只是想知道是否有办法将 CPAN 与系统的核心 Perl 分开。 我应该: 下载源代码并专门为这些模块
单独安装 electron 与通过 electron-builder 安装有什么区别?我正在使用 React 构建一个 Electron 应用程序,并且已经找到了一些教程。它们安装 Electron
两者安装有什么区别?我按照安装页面上的说明在全局范围内安装了 webpack,然后我转到了入门指南,据说在那里可以在本地安装 webpack-cli。 CLI = Command Line Inter
我在 OS X Yosemite 上用 PHP 安装了默认的 Apache 服务器,安装了 pear,用 brew 安装了 Solr (brew install solr),现在我正在尝试使用 PEC
我解压并编译了 Ruby 2.1 并安装了几个支持工具。 但是当我安装了 libssl-dev 时,OpenSSL 不会安装。 我在支持 openssl 时遇到这个错误: make: *** No r
我在 android studio 2.3.1 和 gradle 3.2 中设计了 2 到 3 个应用程序。当我从它运行应用程序到任何设备或模拟器时,一切都工作正常。但是当我从构建文件夹中获取该 ap
我注意到我正在读一本书提到通过 apt-get 安装 numpy 和 opencv apt-get install python-numpy python-opencv 但我可以通过以下方式在 pip
我正在尝试在 Windows 8.1 上安装 ansicon。我提取了文件并达到了我需要调用 ansicon -i 的级别。当我在 cmd 中输入此内容并运行 python 脚本时效果很好,但是当我通
我有 linux MINT 17.3 Kernel 4.4.0-81 所有更新可用。 (由于不同的原因,我无法迁移到更新版本的 ubuntu/mint) 我已经通过 PPA 安装了 FFMPEG(不是
尝试在本地运行我的应用程序时出现错误: 我只在 chrome 浏览器中收到此错误。我尝试过不同的东西,但我不确定为什么它是 Chrome 特定的。 最佳答案 我怀疑这不是 Firebase 问题,而是
这是我第一次开发 AngularJS 应用程序并使用脚手架工具 Yeoman ( http://yeoman.io/ )。我想对我的一些图标使用 fontawesome ( http://fortaw
我知道您通常“应该”$ pip install 如果包没有 brew ,但如果有一个你想安装的 python 包,你可以使用 $ pip install或 $ brew install为了?例如,通过
我正在尝试通过 RVM 安装 Ruby 1.9.3。然而,当谈到安装 RubyGems 时,我得到了这个: curl: (22) The requested URL returned error: 4
我是真正提出问题的新手,但你去吧。 我一直在尝试按照安装指南添加 dnsname: https://github.com/containers/dnsname https://github.com/c
Studio更新至0.4.0 建筑产量为“需要1.8版Gradle”;将设置设置为1.8 bin目录; 建立 “要求1.9级”;将设置设置为1.9 bin; 建立 “要求1.8级” 啊。不知道该怎么做
我刚刚注意到 kernel.org 因维护而停机。是否有使用不同镜子的不同公式?或者我可以向 Homebrew 软件添加不同的来源(如 bundler ?)? 谢谢你的帮助! 最佳答案 快速解决方法:
当我运行时: peardev install phpunit/PHPUnit 我得到以下信息: No releases available for package "pear.phpunit.de/P
服务器操作系统为Fedora 24. 64bit。 我想安装 Git 2.6.6。 所以下载源码并安装。 此服务器离线。所以我不使用“yum”。 ./configure --prefix=/usr/l
我正在尝试在我自己的服务器(操作系统:Linux Ubuntu Server 12.04)上安装 OpenEdX,但我遇到了同样的错误。谁能帮帮我? TASK: [ insights | insta
我是一名优秀的程序员,十分优秀!