EJB注释在JSF中不起作用

EJB注释在JSF中不起作用,jsf,jakarta-ee,glassfish,ejb,Jsf,Jakarta Ee,Glassfish,Ejb,我从JEE开始,需要使用JSF-EJB-JPA 我有一个EJB项目,它部署了我的war文件。当我在战争中使用注释EJB在一个属性中进行注释时,它根本不起作用,没有显示任何信息 我有一个h:dataTable,我想用来自数据库的信息填充它,输入EJB,但数据就是不显示(我不知道它是否没有到达战争现场,或者只是没有显示)。表是空的,只有我(当然)直接写的标题 如果我不在任何地方使用@EJB,则不会正确显示来自EJB的数据,例如,如果我写“Hello world”,我就无法将其打印出来,但是当我胆敢使

我从JEE开始,需要使用JSF-EJB-JPA

我有一个EJB项目,它部署了我的war文件。当我在战争中使用注释EJB在一个属性中进行注释时,它根本不起作用,没有显示任何信息

我有一个h:dataTable,我想用来自数据库的信息填充它,输入EJB,但数据就是不显示(我不知道它是否没有到达战争现场,或者只是没有显示)。表是空的,只有我(当然)直接写的标题

如果我不在任何地方使用@EJB,则不会正确显示来自EJB的数据,例如,如果我写“Hello world”,我就无法将其打印出来,但是当我胆敢使用@EJB时,即使是这些信息也会停止工作,就好像使用@EJB破坏了xhtml和管理器之间的所有连接一样

我遵循了一个教程,在视频中一切都很顺利

控制器的一部分:

import javax.inject.Named;
import javax.inject.Inject;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import javax.ejb.EJB;

@Named(value = "editorialController")
@SessionScoped
public class EditorialController implements Serializable {

    @EJB//(name=Tutorial-ejb")
    private EditorialFacade editorialFacade;
    private Integer randomInt;

    public List<Editorial> findAll()
    {
        return this.editorialFacade.findAll();
    }

    public Integer getRandomInt() {
        return randomInt;
    }

    public void setRandomInt(Integer randomInt) {
        this.randomInt = randomInt;
    }
}
import javax.inject.Named;
导入javax.inject.inject;
导入javax.enterprise.context.SessionScoped;
导入java.io.Serializable;
导入javax.ejb.ejb;
@命名(value=“editorialController”)
@会议范围
公共类EditorialController实现可序列化{
@EJB/(名称=教程EJB)
私人编辑部编辑部编辑部;
私有整数随机整数;
公共列表findAll()
{
返回此.editorialFacade.findAll();
}
公共整数getRandomInt(){
返回随机数;
}
public void setRandomInt(整数randomInt){
this.randomInt=randomInt;
}
}
一张xhtml的图片

<h:body>
Hello from Facelets
<h:outputLabel value="#{editorialController.randomInt}"></h:outputLabel>
<h:form>
    <h:dataTable var="p" value="#{editorialController.findAll()}">
        <h:column>
            <f:facet name="Header">
                <h:outputText value="NAME"></h:outputText>
            </f:facet>
            <h:outputText value="#{p.nombre}"></h:outputText>
         </h:column>
    </h:dataTable>
</h:form>
</h:body>

Facelets的你好
我尝试了:#{editorialController.findAll()}和#{editorialController.findAll}

对于EJB,它们和往常一样:一个用于实体的包,另一个用于外观;netbeans生成了它们,所以我认为不需要复制和粘贴代码。 我正在使用glassfish(payara)。web.xml包含了所有JSF内容

persistence.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="Tutorial-ejbPU" transaction-type="JTA">
       <jta-data-source>jdbc/MyDataSource</jta-data-source> 
       <exclude-unlisted-classes>false</exclude-unlisted-classes>
       <properties>
          <property name="javax.persistence.schema-generation.database.action" value="create"/>
       </properties>
    </persistence-unit>

jdbc/MyDataSource
假的

findAll()
重命名为
getEditorials()
并以这种方式链接它
value=“#{editorialController.editorils}“
。EL使用类似bean的属性与托管bean通信。如果bean不存储其他视图的数据,则将其放入请求/视图范围。如果它不工作,则在
findAll()
/
getEditorials
方法中记录列表的计数。如果它是logs 0,则说明注入bean方法中的错误。@TheBitman:不要在getter中执行任何工作,或者懒惰地执行。在google上搜索“为什么jsf多次调用getter”@Kukeltje你是对的。它可以是派生属性的getter方法(也可以是延迟获取的方法,具体取决于技术方言:)。下面是什么教程?这不是一个好的,见我之前的评论。并对检索到的内容和未检索到的内容进行一些基本调试。将
findAll()
命名为
getEditorials()
,并以这种方式将其链接到
value=“#{editorialController.editorils}”
。EL使用类似bean的属性与托管bean通信。如果bean不存储其他视图的数据,则将其放入请求/视图范围。如果它不工作,则在
findAll()
/
getEditorials
方法中记录列表的计数。如果它是logs 0,则说明注入bean方法中的错误。@TheBitman:不要在getter中执行任何工作,或者懒惰地执行。在google上搜索“为什么jsf多次调用getter”@Kukeltje你是对的。它可以是派生属性的getter方法(也可以是延迟获取的方法,具体取决于技术方言:)。下面是什么教程?这不是一个好的,见我之前的评论。并对检索到的内容和未检索到的内容在哪些方法中进行一些基本调试