我在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}”)
答案 0 :(得分:1)
首先,这不是JSP文件。这是一个Facelets(XHTML)文件。 JSP是一种古老的视图技术。 Facelets是JSP的继承者。
那么,你的具体问题是没有解析JSF标签?当请求网址与FacesServlet
中定义的web.xml
的网址格式不匹配时,就会发生这种情况。如果是*.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也完全是多余的,我会删除它们以防止将来混淆和滥用。