在 jsf 中的类型上找不到属性
Posted
技术标签:
【中文标题】在 jsf 中的类型上找不到属性【英文标题】:Property not found on type in jsf 【发布时间】:2012-08-02 05:49:55 【问题描述】:我正在尝试调用 jsf 中使用 primefaces 的属性。但我在 managedbean.PersonelBean 类型上找不到错误 500。 我正在使用休眠 jsf 和 spring。
PersonelBean.java
@ManagedBean(name="personelMB")
@SessionScoped
public class PersonelBean implements Serializable
private static final long serialVersionUID = 1L;
@ManagedProperty(value="#PersonelService")
IPersonelService personelservice;
List<Personel> personelList;
private int personel_id;
private String pname;
private String pfamily;
private String paddress;
private String pphone;
public IPersonelService getPersonelservice()
return personelservice;
public void setPersonelservice(IPersonelService personelservice)
this.personelservice = personelservice;
public List<Personel> getPersonelList()
personelList=new ArrayList<Personel>();
personelList.addAll(getPersonelservice().getPersonels());
return personelList;
public void setPersonelList(List<Personel> personelList)
this.personelList = personelList;
//getter and setter method
public void addPersonel()
Personel personel=new Personel();
personel.setPaddress(getPaddress());
personel.setPersonel_id(getPersonel_id());
personel.setPfamily(getPfamily());
personel.setPname(getPname());
personel.setPphone(getPphone());
getPersonelservice().addPersonel(personel);
personel.xhtml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="rtl"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
>
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>اطلاعات پرسنلی</title>
</h:head>
<h:body>
<h1>اضافه کردن پرسنل جدید</h1>
<h:form>
<h:panelGrid columns="4" >
شماره پرسنلی :
<h:inputText id="id" value="#personelMB.personel_id"
size="20" required="true"
label="id" >
</h:inputText>
<br></br>
نام :
<h:inputText id="name" value="#personelMB.pname"
size="20" required="true"
label="Name" >
</h:inputText>
نام خانوادگی:
<h:inputText id="family" value="#personelMB.pfamily"
size="20" required="true"
label="family" >
</h:inputText>
آدرس :
<h:inputTextarea id="address" value="#personelMB.paddress"
cols="30" rows="10" required="true"
label="Address" >
</h:inputTextarea>
تلفن:
<h:inputText id="tel" value="#personelMB.pphone"
size="20" required="true"
label="tel" >
</h:inputText>
</h:panelGrid>
<h:commandButton value="درج اطلاعات" action="#personelMB.addPersonel()" />
</h:form>
<h2>مشاهده اطلاعات پرسنل</h2>
<h:form prependId="false">
<p:dataTable id="dataTable" var="personel" value="#personelMB.getPersonelList()">
<f:facet name="header">
اطلاعات پرسنل
</f:facet>
<p:column>
<f:facet name="header">
شماره پرسنلی
</f:facet>
<h:outputText value="#personel.personel_id" />
<f:facet name="footer">
کدملی
</f:facet>
</p:column>
<p:column headerText="نام">
<h:outputText value="#personel.pname" />
</p:column>
<p:column headerText="نام خانوادگی">
<h:outputText value="#personel.pfamily" />
</p:column>
<p:column headerText="آدرس">
<h:outputText value="#personel.paddress" />
</p:column>
<p:column headerText="تلفن">
<h:outputText value="#personel.pphone" />
</p:column>
<f:facet name="footer">
In total there are #fn:length(personelMB.getPersonelList()) personels.
</f:facet>
</p:dataTable>
</h:form>
</h:body>
</html>
但我有这个错误:
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: /personel.xhtml @58,88 value="#personelMB.getPersonelList()": Property 'getPersonelList' not found on type managedbean.PersonelBean
javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
root cause
javax.el.PropertyNotFoundException: /personel.xhtml @58,88 value="#personelMB.getPersonelList()": Property 'getPersonelList' not found on type managedbean.PersonelBean
com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:97)
org.primefaces.component.api.UIData.isLazyLoading(UIData.java:170)
org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:187)
org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:107)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1650)
javax.faces.render.Renderer.encodeChildren(Renderer.java:164)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:389)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
我不知道出了什么问题,但我的 addPersonel() 运行良好。
【问题讨论】:
【参考方案1】:属性值表达式需要在以下语法中指定,不带get
(或is
)前缀和括号:
value="#personelMB.personelList"
【讨论】:
【参考方案2】:查看您的其他 gettes 和 setter 并查看异常解释。
/personel.xhtml @58,88 value="#personelMB.getPersonelList()":在 managedbean.PersonelBean 类型上找不到属性“getPersonelList”
您正在为PersonelBean
的其他属性使用正确的 JSF EL(这个东西:#...):
#personelMB.pname
-> 转换为 personelMB.getPname()
`#bean.property' -> bean.getProperty()
但是你突然使用了:
personelMB.getPersonelList()
你应该使用
#personelMB.personelList
【讨论】:
【参考方案3】:您可以使用##personelMB.getPersonelList()
,但您需要添加两个jar 文件el-ap-SNAPSHOT.jar
和el-impl-SNAPSHOT.jar
。
【讨论】:
根据到目前为止在问题中提供的信息,OP 已经使用 EL 2.2。这个特殊问题只是由 PrimeFaces 的错误/功能引起的。以上是关于在 jsf 中的类型上找不到属性的主要内容,如果未能解决你的问题,请参考以下文章
展开segue“在类型'AddBusStopViewController'上找不到'BusStopItem'的属性”
在“RKObjectManager”类型的对象上找不到属性“managedObjectStore”