java - JSF : PropertyNotFoundException The class '' does not have the property ''

标签 java jsf el

这两天我一直在寻找解决这个基本问题的方法。是的,我确实有 GETTER 和 SETTER,是的,我真的认为惯例没问题。

代码如下:

bean 类:

@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;
}

}

页面索引.xhtml:

<ui:composition template="/templates/layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">

<ui:define name="content">

    <h:form>
        <p:panel header="Créer un Client">
            <h:outputText value="Prénom : "></h:outputText>
            <p:inputText id="clientName" value="#{clientController.client.name}" required="true"
                requiredMessage="Entrez votre prénom" message="fc">
                <f:validateLength minimum="2" />
            </p:inputText>
            <h:outputText value="Nom : "></h:outputText>
            <p:inputText id="clientLastName" value="#{clientController.client.lastName}"
                required="true" requiredMessage="Entrez votre nom"   message="fc">
                <f:validateLength minimum="2" />
            </p:inputText>
        </p:panel>
        <p:commandButton value="Submit"         
            actionListener="#{clientController.createclient}" />
    </h:form>
</ui:define>
</ui:composition>

错误:

/index.xhtml @14,57 value="#{clientController.client.name}": The class 'controllers.ClientController' does not have the property 'client'.

如您所见,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>

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>

最佳答案

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

我想主要问题是您尝试将 CDI 与 JSF 托管 bean 一起使用,这应该不会毫无问题地工作。

  1. 您正在使用 javax.faces.bean.SessionScopedjavax.faces.bean.ManagedBean 但您应该使用 javax.enterprise。 context.SessionScopedjavax.annotation.ManagedBean 甚至 javax.inject.Named 而不是 ManagedBean。看看this question获取有关差异的详细信息。

  2. 您创建的文件 manage-beans.xml 包含通常属于 faces-config.xml 但无论如何都已过时的内容,因为声明在 XML 中是通过注释声明的替代方法。你不需要两者。您可以删除 manage-beans.xmlweb.xml 中的引用。如果您想使用此类 XML 声明,您可以将它们放在 faces-config.xml 中。

  3. 您的 web.xml 包含 facelets.SKIP_COMMENTS,应将其替换为 javax.faces.FACELETS_SKIP_COMMENTS

  4. 您的项目缺少 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>

另见:

关于java - JSF : PropertyNotFoundException The class '' does not have the property '' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798696/

相关文章:

java - @test 注释在 testNG 中如何工作?

java - 将 double 值舍入为 2 个小数位

jsf - 如何使用PrimeFaces p:fileUpload?永远不会调用监听器方法,或者UploadedFile为null/引发错误/不可用

javascript - JSF + JSON : Output "plain" text in servlet?

java - 无法使用 EL 从 servlet 上下文获取 init 参数

java - 只使用 <= 和 >= 形式(不包括 =< 和 =>)进行比较的原因是什么?

Java 休息客户端 : jax-rs & automatic type mapping

java - 打印 <rich :modalPanel/>? 的内容

java - 如何在 c :set? 中使用 Struts 迭代变量

java - 将默认值设为先前选择的值 (JSTL)