Tôi đang làm việc và tìm hiểu về JSF + Facelets những ngày này. Tôi có một trang BackingBean và một trang XHTML Facelet. Khi tôi yêu cầu trang facelet (chỉ một lần) phương thức sao lưu bean được gọi nhiều lần.Tại sao phương thức BackingBean được gọi nhiều lần khi yêu cầu facelet?
Điều gì có thể là lý do cho điều này?
Tôi không thể thấy bất kỳ điều gì đặc biệt. Cảm ơn trước.
Đây là facelet:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<ui:composition template="index.xhtml">
<ui:define name="content">
<h:form>Name: <h:inputText id="nameFilterPattern" value="#{kundenBackingBean.nameFilterPattern}" /><h:commandButton value="Suchen"/></h:form>
<h:dataTable var="kunde" value="#{kundenBackingBean.kunden}" rowClasses="rowHighlight, rowOrdinary">
<h:column>
<f:facet name="header">
<h:outputText value="Kundennr" />
</f:facet>
<h:outputText value="#{kunde.kundenNr}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:outputText value="#{kunde.name}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Vorname" />
</f:facet>
<h:outputText value="#{kunde.vorname}"/>
</h:column>
<h:column>
<h:outputLink>Details</h:outputLink>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</body>
</html>
Và đây là sự ủng hộ-đậu. Phương pháp getKunden được gọi nhiều lần:
@ManagedBean
@SessionScoped
public class KundenBackingBean extends AbstractBackingBean {
private String nameFilterPattern;
public List<Kunde> getKunden(){
System.out.println("getKunden");
return getApplication().getKunden(getNameFilterPattern());
}
public String getNameFilterPattern() {
return nameFilterPattern;
}
public void setNameFilterPattern(String nameFilterPattern) {
System.out.println("Name filter: " + nameFilterPattern);
this.nameFilterPattern = nameFilterPattern;
}
}
luôn được gọi cùng một số lần? – volvox
bạn có sử dụng chế độ gỡ lỗi IDE để xác minh rằng các phương thức được gọi nhiều lần hoặc bạn thấy nó trong nhật ký không? – Roman
Nó có vẻ như ở yêu cầu đầu tiên nó được gọi là 8 lần và sau đó nó được gọi là 21 lần.Tôi sử dụng eclipse + glassfish và bắt đầu nó trong chế độ gỡ lỗi. Tôi chỉ cần chèn một sysout vào phương thức và đếm kết quả đầu ra của giao diện điều khiển. – c0d3x