Java JSF:PropertyNotFoundException类'';没有属性'';

Java JSF:PropertyNotFoundException类'';没有属性'';,java,jsf,el,Java,Jsf,El,两天来,我一直在寻找解决这个基本问题的办法。是的,我有接二连三,是的,我真的认为大会是可以的 代码如下: 豆子: @Named @SessionScoped public class ClientController implements Serializable { @Inject private ClientService das; private List<Client> clientsList; public void setClientsList(List<Clie

两天来,我一直在寻找解决这个基本问题的办法。是的,我有接二连三,是的,我真的认为大会是可以的

代码如下:

豆子:

@Named
@SessionScoped
public class ClientController implements Serializable {

@Inject
private ClientService das;
private List<Client> clientsList;
public void setClientsList(List<Client> clientsList) {
    this.clientsList = clientsList;
}

private Client client = new Client();


public Client getClient() {
    return client;
}

public void setClient(Client client) {
    this.client = client;
}

public void createclient(ActionEvent actionEvent) {
    das.create(client);
}

public List<Client> getClientsList() {
    clientsList = das.findByNativeQuery(Client.ALL);
    return clientsList;
}

}
正如您所看到的,Bean被解析,甚至createclient()方法也被解析(我尝试在没有剩余代码的情况下测试它)。问题只是关于属性

请帮忙?我相信这是一个愚蠢的问题,但有时我们只是需要另一种观点

编辑:

WEB-INF/WEB.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
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>Bourse</display-name>

<!-- Current project stage. When it is set to 'Development' Primefaces give 
    a lot of debug information on the screen. -->
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

<context-param>
    <param-name>facelets.SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
</context-param>

<welcome-file-list>
    <welcome-file>/index.xhtml</welcome-file>
</welcome-file-list>

<!-- Staring JSF -->
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<!-- JSF URL mapping -->
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>javax.faces.CONFIG_FILES</param-name>
    <param-value>/WEB-INF/manage-beans.xml</param-value>
</context-param>
</web-app>

交易所
javax.faces.PROJECT_阶段
发展
facelets.SKIP_注释
真的
/index.xhtml
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
*.xhtml
javax.faces.CONFIG_文件
/WEB-INF/manage-beans.xml
WEB-INF/manage-beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
 <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
    <managed-bean>
        <managed-bean-name>clientController</managed-bean-name>
        <managed-bean-class>controllers.ClientController</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
 </faces-config>

客户端控制器
controllers.ClientController
一场

要在JSF2.0中启用CDI,需要使用beans.xml或faces-config.xml来定义托管bean。建议使用单独的文件来配置bean,因为faces-config.xml将具有特定于应用程序的配置。请阅读本文,以了解CDI的工作原理。请注意,CDI基于JavaEE版本工作

更新:


您需要检查xhtml页面中的每个地方是否正确命名bean,并确保正确加载了类和配置文件

我检查了您的代码,发现有几个问题,但我不确定是哪一个问题导致了您的问题,因为我注释掉了数据库内容以使其快速工作

我想主要的问题是,您试图将CDI与JSF管理的bean一起使用,而JSF管理的bean不应该毫无问题地工作

  • 您正在使用
    javax.faces.bean.SessionScoped
    javax.faces.bean.ManagedBean
    ,但是您应该使用
    javax.enterprise.context.SessionScoped
    javax.annotation.ManagedBean
    甚至
    javax.inject.Named
    而不是
    ManagedBean
    。请查看以获取有关差异的详细信息

  • 您创建的文件
    manage beans.xml
    中包含的内容通常属于
    faces config.xml
    ,但无论如何都是过时的,因为xml中的声明是通过注释进行声明的替代。你不需要两者兼而有之。您可以删除
    managebeans.xml
    web.xml
    中的引用。如果您想使用这样的XML声明,您可以将它们放在
    faces config.XML

  • 您的web.xml包含
    facelets.SKIP_COMMENTS
    ,应替换为
    javax.faces.facelets\u SKIP_COMMENTS

  • 您的项目缺少
    beans.xml
    。您在评论中写道,您已经创建了一条评论,无论如何,这里有一个参考,它应该是什么样子的:

  • 例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
           http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
    </beans>
    
    
    
    另见:


    除了之前的答案中提到的所有其他问题,你必须检查,你只是有一个EL问题:

     value="# {clientController.client.lastName}"
             ^here this is not valid for EL
    

    在您按照所有其他建议进行更改后,您的异常应该会消失。

    在我的例子中,我只是更改了变量的名称,目标文件夹没有反映这些更改。因此,当我编译和重新部署时,它对我很有效

    你能在你的类中添加@ManagedBean(name=“clientController”)并检查吗?@Octopus好主意,我刚刚试过,但没有,同样的问题。我确实认为问题不在于bean名称解析。可能是另一个文件中的配置问题?您有beans.xml或faces config.xml吗?没有,我认为这就是问题所在,但我不知道该放在它上面什么,放在哪里。我发现这段代码()的示例确实提供了一些,但没有提到itCheck out这个链接中的控制器-。您将知道如何以及在何处定义托管Bean我刚刚配置了beans.xml和web.xml,但问题是相同的。。。我将编辑帖子,给出他们的内容也许你可以在项目中查看来源:来源有什么想法吗?对不起,我也不明白为什么会发生这种情况?谢谢你的完整答案。这确实对我有帮助,我最终加载了一个催人泪下的页面:),但现在bean就是无法访问:标识符'clientController'解析为null。顺便说一句,我正试图修复它(我选择了一个@namedbean,在这种情况下查看您关于任何其他配置的链接)嗯,我的项目中没有它。。。可能是IDE配置问题?无论如何,感谢您尝试帮助我:)如果您复制/粘贴了代码,它会出现在index.xhtml上,通常这是导致
    PropertyNotFoundException
    的原因。但是如果你说不是,你应该修改所有其他的
    value
    属性,看看它是否正确映射。哦,你是对的,似乎我在编辑粘贴的代码以格式化我的帖子时犯了一个错误(这里的第一篇帖子,真是个新手)
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
           http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
    </beans>
    
     value="# {clientController.client.lastName}"
             ^here this is not valid for EL