![](/img/trans.png)
[英]org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property 'user'
[英]JSF : PropertyNotFoundException The class '' does not have the property ''
两天我正在寻找解决这个基本问题的方法。 是的,我确实拥有GETTER AND SETTER,而且我确实认为会议是正常的。
这是代码:
豆角,扁豆 :
@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;
}
}
Page index.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一起使用,这些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中的声明是通过注释声明的替代方法。 你不需要两者。 您可以删除web.xml
的manage-beans.xml
和引用。 如果你想使用这样的XML声明,你可以将它们放在faces-config.xml
。
您的web.xml包含facelets.SKIP_COMMENTS
,应该用javax.faces.FACELETS_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>
也可以看看:
要在JSF2.0中启用CDI,您需要使用beans.xml或faces-config.xml来定义托管bean。 建议使用单独的文件来配置bean,因为faces-config.xml将具有特定于应用程序的配置。 请阅读此链接以更多地了解CDI的工作原理。 请注意,CDI基于JAVA EE版本工作。
更新:
您需要检查是否在xhtml页面中的所有位置正确命名bean,并确保正确加载了类和配置文件
除了所有其他问题,这些家伙在以前的答案中说你必须检查,你只是有一个EL问题:
value="# {clientController.client.lastName}"
^here this is not valid for EL
在您关注所有其他建议后,请更改此设置,并且您的例外情况应该消失。
在我的情况下,我只是更改了变量的名称,目标文件夹没有反映更改。 因此,当我编译和重新部署时,它为我工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.