比方說,我有一個JSF頁面,在頂部有一個共同的下拉菜單(標題)和一個用於向此菜單添加新值的窗體。而且我在表單中有一個絕對正確的屬性「更新」'ajax'標籤(我的意思是,提交表單後更新頁面上的下拉菜單)。重點在於下拉菜單和添加值表單具有不同的視圖類。重新加載bean屬性
第一招:
二@Named
@ViewScoped
public class DropdownMenuView {
@Inject
private ValuesService service;
private List<String> values;
@PostConstruct
public void init() {
value = service.getValues();
}
// Getters Setters...
}
之一:
@Named
@ViewScoped
public class NewValuesView {
@Inject
private ValuesService service;
public void addValue(String newValue) {
service.addValue(newValue);
}
}
好吧,現在我通過添加新形式的價值,並打開下拉列表。但是這個列表並沒有真正更新,因爲DropdownMenuView上的'values'列表仍然是一樣的。
我的問題是,如何在提交表單後更新'值'?有沒有注入DropdowneMenuView到NewValuesView並手動更新它的方法?
我現在看到的唯一方法是實現類似「events class」的事情,在值更新後觸發一個事件並在getter中檢查這個類。
事件holer虛擬實現:
public class EventHolder {
private static boolean event;
public static void fire() {
event = true;
}
public static boolean poll() {
boolean res = event;
event = false;
return res;
}
}
而且第2頁:
public class NewValuesView {
@Inject
private ValuesService service;
public void addValue(String newValue) {
service.addValue(newValue);
EventHolder.fire();
}
}
和頁面:
public class DropdownListView {
...
public List<String> getValues() {
if (EventHolder.poll()) {
values = service.getValues();
}
return values;
}
}
但我知道,放邏輯getter/setter方法是不好的方法。
那麼,有什麼建議?
謝謝。