比方说,我有一个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方法是不好的方法。
那么,有什么建议?
谢谢。