JSP示例中没有视图

时间:2012-02-28 11:01:32

标签: jsf java-ee glassfish javadb

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

我的代码:

Entitiy Class(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 Controller:

@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 个答案:

答案 0 :(得分:1)

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

那么,你的具体问题是没有解析JSF标签?当请求网址与FacesServlet中定义的web.xml的网址格式不匹配时,就会发生这种情况。如果是*.jsf,那么您需要更改

中的请求网址
  

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

  

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

然而,更好的方法是将FacesServlet的网址格式更改为*.xhtml,这样您就不需要使用虚拟网址并引入安全限制来防止最终用户意外或严重查看原始*.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的getter和setter也完全是多余的,我会删除它们以防止将来混淆和滥用。