如何从使用CDI的NextClient
bean获得输出到facet?
我正在尝试使用CDI导入:
package dur.beans;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
@Named("nextClient")
@ApplicationScoped
public class NextClient implements NextClientLocal {
private int next = 1009;
@Override
public int getNext() {
next = next + 1;
return next;
}
}
以facelets为例:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
>
<h:head></h:head>
<h:body>
This and everything before will be ignored
<ui:composition template="template.xhtml">
<ui:define name="navigation">
<ui:include src="menu.xhtml"/>
</ui:define>
<ui:define name="main">
<h1>bird</h1>
<p>
next #{nextClient.next}
</p>
</ui:define>
</ui:composition>
This and everything after will be ignored
</h:body>
</html>
然而bean似乎没有任何输出:
thufir@dur:~$
thufir@dur:~$ lynx -dump http://localhost:8080/EntAppWeb-war/next.xhtml birds...
crud ops
__________________________________________________________________
[1]Home
[2]Parrot
[3]Eagle
[4]Falcon
[5]next
bird
next
References
1. http://localhost:8080/EntAppWeb-war/next.xhtml
2. http://localhost:8080/EntAppWeb-war/next.xhtml
3. http://localhost:8080/EntAppWeb-war/next.xhtml
4. http://localhost:8080/EntAppWeb-war/next.xhtml
5. http://localhost:8080/EntAppWeb-war/next.xhtml
thufir@dur:~$
此示例改编自Facelets Essentials;然而,我想使用CDI。
是bean的问题。xml
?有些地方说它是可选的,而另一些地方说它是bean。xml
是必需的。这似乎是可选的:
23.13配置CDI应用程序
当您的bean用作用域类型注释时,服务器会将应用程序识别为bean存档,不需要额外的配置。CDI bean的可能作用域类型列在使用范围中。CDI使用名为beans.xml.的可选部署描述符与其他JavaEE部署描述符一样,beans.xml中的配置设置是CDI类中注释设置之外使用的。如果存在冲突,beans.xml中的设置将重写注释设置。只有在某些有限的情况下,存档才必须包含beans.xml部署描述符...
针对JavaEE平台p404的JavaEE7教程第7版
例如,从我所读到的内容来看,CDI似乎比@ManagedBean
更受欢迎。我还没有找到一个比这个更简单的例子。
另见:
https://stackoverflow.com/a/4397444/262852
https://stackoverflow.com/questions/26110888/what-is-the-alternative-to-managedbean
源代码:
https://github.com/THUFIR/EntAppWeb
支持bean是正确的。您需要检查您的服务器是否支持CDI,或者您需要使用一些额外的库来使其工作(例如CDI)。Apache Tomcat)。
我认为CDIbeans.xml是必需的,因为容器需要扫描所有用CDI注释注释的bean。
<?xml version="1.0" encoding="UTF-8"?>
<beans 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/beans_1_1.xsd"
bean-discovery-mode="annotated">
</beans>
这个bean-发现-模式="注释"是扫描你的类。
我有一个用@ApplicationScoped注释的CDIBean。有没有一种方法可以告诉Spring在组件扫描期间拾取它,就像它被@component注释一样?Spring确实理解@Inject注释,那么为什么不@ApplicationScoped呢? 这个想法是,在Spring中使用CDI bean会很方便(至少如果他们只使用普通的依赖注入,而没有像拦截器、装饰器这样花哨的CDI东西...)
我使用CDI注释定义了一个RequestScoped bean,如下所示。我有几个页面使用同一个bean。当我从一页导航到另一页时。bean obj保持不变。即使我更改了会话(使用不同的用户登录)。bean对象没有改变。 根据RequestScope定义,bean实例应该为每个新请求重新创建。我错过了什么? 我正在使用JSF/Primefaces。从create输入的值。导航到详细信息后可以看到x
CDI到达以执行类的构造函数。但是,请求字段未初始化(注入)。 我做错了什么?
7.3.1 bean的命名 每个bean都有一个或多个标识符。在承载bean的容器中这些标识符必须是唯一的。一个bean通常只有一个标识符,但如果需要有一个以上的标识符,其他的可以认为是别名。 在基于XML的配置元数据中,使用id和/或name属性来指定bean的标识符。id属性允许您精确地指定一个ID。习惯上,这些命名都是数字和字母('myBean', 'fooService'等),但是也可以包
视图和bean一直在工作,直到我试图修复非标准名称,现在我已经打破了两者之间的连接。奇怪的是,“返回”按钮有正确的链接,但内容就是不显示,也不记录。为什么不执行Detail.get注释()? 我一直在浏览焊接文档,并试图更好地理解@Inject。似乎有一个我也不明白的生命周期问题。如果它不是生命周期,那么我甚至不能推测为什么Detail.get注释()从未在glassfish日志中显示: 值200
我们正在尝试将应用程序从Spring迁移到Quarkus Spring。我们可以根据需要重新编写应用程序逻辑。问题来了,因为我们正在使用共享的spring罐,这是传统的,而且数量很多。大多数spring JAR都使用@Autowired使用依赖项注入,但被注入的相应类没有@Component注释。 将用示例描述问题: 类“MyProject”属于Quarkus应用程序 类OtherLevelOne