0

我在 JSP (Java EE) 中的视图有问题,只显示标题。

我的代码:

实体类(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}")

4

1 回答 1

1

首先,那不是一个 JSP 文件。那是一个 Facelets (XHTML) 文件。JSP是一种古老的视图技术。Facelets 是JSP 的继承者。

那么,您的具体问题是没有解析 JSF 标签?当请求 URL 与 中定义的 URL 模式不匹配时,可能会发生这种FacesServlet情况web.xml。如果是 example *.jsf,那么您需要将请求 URL 从

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

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

但是,更好的做法是只更改 to 的 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();
}

注入的依赖项在构建期间不可用。的 getter 和 setterkontofacate也完全是多余的,我会删除它们以防止将来的混乱和滥用。

于 2012-02-28T12:30:03.460 回答