我已經看到關於調用bean構造函數和ViewScope的其他問題,我仍然有困難。我看到的問題涉及到我的應用程序中的兩個特定頁面。第一個是dataTable(現在它充滿了隨機生成的數據,但最終會調用數據庫),第二個頁面是一個相當簡單的顯示頁面,其中來自所選行的信息以表單的形式顯示,供編輯或查看 - 這是我的detail.xhtml
頁面。這是這個頁面的問題;它的構造函數被調用兩次:第一次當我導航到頁面時,再次按下commandButton是否提交更改或取消更改無關緊要時,detail.xhtml輔助bean的構造函數被第二次調用。ViewScope的構造函數調用兩次,不知道爲什麼
我的豆子是@ViewScoped
,導入javax.faces.bean.ViewScoped
。其他一些細節可能會有所作爲,但如果他們這樣做,我不明白爲什麼:我的UserDetailBean.java繼承自一個基本bean(我最初調用UIBaseBean.java)。現在,我的UIBaseBean是@RequestScoped
。據我所知,這不應該有所作爲,因爲我的UserDetailBean是@ViewScoped
,請糾正我,如果我錯了。
可能有所作爲的其他細節是在UIBaseBean和UserDetailBean的構造函數中設置一個變量。我想在我的頁面頂部的工具欄中顯示用戶的位置。爲此,我在UIBaseBean中創建了一個變量:
protected String toolbarDescription;
我還在UIBaseBean中提供了setter和getter。在UIBaseBean的構造函數我定義變量:
toolbarDescription = "fix me";
這個定義只是讓我知道要覆蓋在支持Bean的變量在我的應用程序的任何特定頁面。在我的UserDetailBean中,我爲字符串toolbarDescription分配一個新值。該值顯示在detail.xhtml頁面上。否則,我的detail.xhtml頁面的bean非常流行,它會獲取並設置detail.xhtml頁面上表單中數據的顯示屬性。
設置詳細信息頁面,以便重定向發生導航,導航(按下commandButton時)導航發生重定向。我嘗試過使用faces-config導航規則,有和沒有重定向,隱式導航有和沒有重定向,但UserDetailBean構造函數總是被調用兩次。
哦,我在我的UserDetailBean構造函數的toolbarDescription變量上設置了一個斷點,該程序停止了兩次程序:首次調用頁面時,以及在詳細信息頁面上按下commandButton之後再次停止該程序。
從我所描述的,誰能告訴我爲什麼我的構造函數被調用兩次?我是否錯誤地設計了我的bean,還是我的應用程序中的問題更深?
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import [package name].UIBaseBean;
import java.util.Locale;
import javax.faces.bean.ManagedProperty;
@ManagedBean
@ViewScoped
public class UserDetailBean extends UIBaseBean {
@ManagedProperty(value = "#{param.action}")
private String action;
private String firstName;
private String lastName;
private String jobTitle;
private String DOH;
private String location;
private String status;
private String comments;
@ManagedProperty(value = "#{param.id}")
private String id;
private String tabTitle;
private boolean editMode;
private boolean viewMode;
private ClUserDetail dBUserDetail;
/** Creates a new instance of UserDetailBean */
public UserDetailBean() {
toolbarDescription = CoreMsgBundle.getMessageFromResourceBundle("UserDetail", Locale.ENGLISH);
}
非常感謝你,這正如我希望原始代碼能夠工作一樣。至於@ManagedProperty - 這是一個沒有很好理解的小信息的例子,是一件壞事。我讀[這個答案](http://stackoverflow.com/questions/4888942/viewparam-vs-managedpropertyvalue-param-id),並認爲,「哦,這是一個好主意,我會在我的應用程序中做到這一點」。 – Sean 2011-02-04 18:34:53