【问题标题】:Property not found on type in jsf在 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() 运行良好。

【问题讨论】:

    标签: java jsf jakarta-ee jsf-2 primefaces


    【解决方案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.jarel-impl-SNAPSHOT.jar

        【讨论】:

        • 根据到目前为止在问题中提供的信息,OP 已经使用 EL 2.2。这个特殊问题只是由 PrimeFaces 的错误/功能引起的。
        猜你喜欢
        • 2014-02-17
        • 1970-01-01
        • 2019-06-07
        • 2016-09-16
        • 2011-11-15
        • 2016-01-10
        • 2015-10-09
        • 2019-11-05
        相关资源
        最近更新 更多