/index.xhtml:在类型java.lang.String JSF上找不到属性'nazwa'

时间:2014-01-26 14:05:23

标签: jsf jsf-2 el

我在Netbeans 7.4 / JDK 1.7环境中运行Tomcat 7上的简单应用程序时遇到了问题。

错误讯息:/index.xhtml: Property 'nazwa' not found on type java.lang.String

Tomcat日志:

sty 26, 2014 2:58:37 PM com.sun.faces.context.ExceptionHandlerImpl log
1100: JSF1073: javax.el.ELException caught during processing of RENDER_RESPONSE 6 : UIComponent-ClientId=, Message=/index.xhtml: Property 'nazwa' not found on type java.lang.String
sty 26, 2014 2:58:37 PM com.sun.faces.context.ExceptionHandlerImpl log
1100: /index.xhtml: Property 'nazwa' not found on type java.lang.String
javax.el.ELException: /index.xhtml: Property 'nazwa' not found on type java.lang.String
    at com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:88)
    at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
    at com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:207)
    at com.sun.faces.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:104)
    at com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:527)
    at com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:992)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1896)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:451)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2430)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2419)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

faces-config.xml:

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
    <managed-bean>
        <managed-bean-name>menedzer</managed-bean-name>
        <managed-bean-class>pl.helion.jeeweb.notowaniagieldowe.entity.Menedzer</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
</faces-config>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

index.html:

<?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 xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h1>Notowania gieldowe</h1>
        <table>
            <tr>
                <th>Nazwa</th><th>Symbol</th><th>Cena</th><th>Zmiana %</th>
            </tr>
            <ui:repeat var="spolka" value="#(menedzer.spolki}">
                <tr>
                    <td>#{spolka.nazwa}</td>
                    <td>#{spolka.symbol}</td>
                    <td>#{spolka.ostatnie.cena}</td>
                    <td>#{spolka.ostatnie.zmiana}</td>
                </tr>
            </ui:repeat>
        </table>
    </h:body>
</html>

pl.helion.jeeweb.notowaniagieldowe.entity.Menedzer:

package pl.helion.jeeweb.notowaniagieldowe.entity;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Menedzer {
    private List<Spolka> spolki;

    public List<Spolka> getSpolki() {
        return spolki;
    }

    public void setSpolki(List<Spolka> spolki) {
        this.spolki = spolki;
    }

    public Menedzer(){
        spolki = new ArrayList<Spolka>(3);
        Date d = new Date();
        spolki.add(new Spolka("Kocia Spółka Węglowa", "KSW", "energetyczny", 20.0, 11.1, d));
        spolki.add(new Spolka("KitKompDotCom", "KKDC", "informatyczny", 90.0, 3.4, d));
        spolki.add(new Spolka("Kocie Dance Studio", "KDS", "rozrywkowy", 15.0, -11.7, d));
    }

}

pl.helion.jeeweb.notowaniagieldowe.entity.Spolka:

package pl.helion.jeeweb.notowaniagieldowe.entity;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Spolka {

    public String getNazwa() {
        return nazwa;
    }

    public void setNazwa(String nazwa) {
        this.nazwa = nazwa;
    }

    public String getSymbol() {
        return symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public String getSektor() {
        return sektor;
    }

    public void setSektor(String sektor) {
        this.sektor = sektor;
    }

    public List<Notowanie> getNotowania() {
        return notowania;
    }

    public void setNotowania(List<Notowanie> notowania) {
        this.notowania = notowania;
    }

    public Notowanie getOstatnie() {
        if (this.ostatnie == null){
            if (this.getNotowania() != null && !this.getNotowania().isEmpty()){
                this.ostatnie = this.getNotowania().get(this.getNotowania().size() - 1);
            }
        }
        return this.ostatnie;
    }

    public void setOstatnie(Notowanie ostatnie) {
        this.ostatnie = ostatnie;
    }
    private String nazwa;
    private String symbol;
    private String sektor;
    private List<Notowanie> notowania;
    private Notowanie ostatnie;

    public Spolka(){}

    public Spolka(String nazwa, String symbol, String sektor){
        this.nazwa = nazwa;
        this.symbol = symbol;
        this.sektor = sektor;
    }

    public Spolka(String nazwa, String symbol, String sektor, double cena, double zmiana, Date dzien){
        this(nazwa, symbol, sektor);
        this.notowania = new ArrayList<Notowanie>();
        this.notowania.add(new Notowanie(cena, dzien, zmiana, this));
    }

}

pl.helion.jeeweb.notowaniagieldowe.entity.Notowanie:

package pl.helion.jeeweb.notowaniagieldowe.entity;

import java.util.Date;

public class Notowanie {
    private double cena;
    private Date dzien;
    private double zmiana;
    private Spolka spolka;
    public Notowanie(){}

    public Notowanie (double cena, Date dzien, double zmiana, Spolka spolka){
        this.cena = cena;
        this.dzien = dzien;
        this.zmiana = zmiana;
        this.spolka = spolka;
    }

    public double getCena() {
        return cena;
    }

    public void setCena(double cena) {
        this.cena = cena;
    }

    public Date getDzien() {
        return dzien;
    }

    public void setDzien(Date dzien) {
        this.dzien = dzien;
    }

    public double getZmiana() {
        return zmiana;
    }

    public void setZmiana(double zmiana) {
        this.zmiana = zmiana;
    }

    public Spolka getSpolka() {
        return spolka;
    }

    public void setSpolka(Spolka spolka) {
        this.spolka = spolka;
    }
}

该服务器无法看到此对象的原因是什么?

1 个答案:

答案 0 :(得分:0)

文件index.html中的愚蠢错误:

而不是<ui:repeat var="spolka" value="#(menedzer.spolki}"> 它应该是<ui:repeat var="spolka" value="#{menedzer.spolki}">

只有一个括号('('和'{')不同,对我来说它是看不见的......