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タグが解析されないということですか?FacesServletこれは、リクエストURLがで定義されているのURLパターンと一致しなかった場合に発生する可能性がありますweb.xml。たとえば*.jsf、の場合は、リクエストURLを次のURLから変更する必要があります。

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

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

FacesServletただし、 toのURLパターンを変更するだけで、*.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も完全に不要です。将来の混乱や乱用を防ぐために、それらを削除します。

于 2012-02-28T12:30:03.460 に答える