Нет представления в примере JSP - PullRequest
0 голосов
/ 28 февраля 2012

У меня проблема с представлением в JSP (Java EE). Отображается только заголовок.

Мой код:

Класс Entitiy (Konto);

@Entity
public class Konto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable=false)
    @NotNull(message="Kontonummer muss angegenben werden")
    @Pattern(regexp="[0-9][0-9][0-9][0-9]")
    private String kontonummer;

    @Column(nullable=false)
    @NotNull(message="Kontostand muss angegeben werden")
    @DefaultValue(value="0.0")
    private Double ktostd;

    @Column(nullable=false)
    @DecimalMin(value="0", message="Der Zins muss zw. 0 und 10 % liegen")
    @DecimalMax(value="0.1", message="Der Zins muss zw. 0 und 10 % liegen")
    private Double habenZins;

    @ManyToOne
    @JoinColumn(nullable=false)
    @NotNull(message="Besitzer muss angegeben werden")
    private Besitzer besitzer;

    public Besitzer getBesitzer() {
        return besitzer;
    }

    public void setBesitzer(Besitzer besitzer) {
        this.besitzer = besitzer;
    }

    public Double getHabenZins() {
        return habenZins;
    }

    public void setHabenZins(Double habenZins) {
        this.habenZins = habenZins;
    }

    public String getKontonummer() {
        return kontonummer;
    }

    public void setKontonummer(String kontonummer) {
        this.kontonummer = kontonummer;
    }

    public Double getKtostd() {
        return ktostd;
    }

    public void setKtostd(Double ktostd) {
        this.ktostd = ktostd;
    }





    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Konto)) {
            return false;
        }
        Konto other = (Konto) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "at.korn.entity.NewEntity[ id=" + id + " ]";
    }

}

Kontolist.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h1>Kontoliste</h1>
        <h:form>
        <h:dataTable value="#{kontolist.kontos}" var="konto">
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Kontonummer"></h:outputText>
                </f:facet>
                <h:outputText value="#{konto.kontonummer}"></h:outputText>
            </h:column>

        </h:dataTable>
            </h:form>
    </h:body>
</html>

Контроллер KontoList:

@ManagedBean
@SessionScoped
public class Kontolist {
    @EJB
    KontoFacadeLocal kontofacade;

    private List<Konto> kontos;
    /** Creates a new instance of kontolist */
    public Kontolist() {
        kontos = kontofacade.findAll();
    }

    public KontoFacadeLocal getKontofacade() {
        return kontofacade;
    }

    public void setKontofacade(KontoFacadeLocal kontofacade) {
        this.kontofacade = kontofacade;
    }

    public List<Konto> getKontos() {
        setKontos(kontofacade.findAll());
        return kontos;
    }

    public void setKontos(List<Konto> kontos) {
        this.kontos = kontos;
    }

}

Проблема:

Отображается только заголовок.В исходном коде из браузера есть тот же код без внедрения html (например, value = "# {konto.kontonummer}")

1 Ответ

1 голос
/ 28 февраля 2012

Прежде всего, это не файл JSP.Это файл Facelets (XHTML).JSP - это древняя технология просмотра.Facelets является преемником JSP.

Итак, ваша конкретная проблема в том, что теги JSF не были проанализированы?Это может произойти, если URL-адрес запроса не соответствует шаблону URL-адреса FacesServlet, как определено в web.xml.Если это, например, *.jsf, то вам нужно изменить URL запроса с

http://localhost:8080/contextname/kontolist.xhtml

на

http://localhost:8080/contextname/kontolist.jsf

Однако гораздо лучше просто изменить шаблон URL-адреса FacesServlet на *.xhtml, чтобы вам не пришлось возиться с виртуальными URL-адресами и вводить ограничения безопасности для предотвращенияконечному пользователю от случайного или случайного просмотра необработанных *.xhtml страниц.

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

См. также:


Не связано с конкретной проблемой, вы, кстати, обнаружили ошибку NullPointerException в своем коде.Замените

public Kontolist() {
    kontos = kontofacade.findAll();
}

на

@PostConstruct
public void init() {
    kontos = kontofacade.findAll();
}

Введенные зависимости, в частности, недоступны во время построения.Методы получения и установки для kontofacate также полностью излишни, я бы удалил их, чтобы избежать путаницы и злоупотреблений в будущем.

...