Disons que, j'ai la page JSF avec menu déroulant commune sur le dessus (en-tête) et un formulaire d'ajout de nouvelles valeurs à ce menu. Et j'ai une étiquette absolument correcte attribut « mise à jour » de « ajax » intérieur de la forme (je veux dire, ce menu déroulant de la page est mis à jour après la présentation du formulaire). Le point est que le menu déroulant et le formulaire pour ajouter des valeurs ont différentes classes de vue.propriété de haricots
premier:
@Named
@ViewScoped
public class DropdownMenuView {
@Inject
private ValuesService service;
private List<String> values;
@PostConstruct
public void init() {
value = service.getValues();
}
// Getters Setters...
}
seconde:
@Named
@ViewScoped
public class NewValuesView {
@Inject
private ValuesService service;
public void addValue(String newValue) {
service.addValue(newValue);
}
}
Ok, maintenant j'ajouter une nouvelle valeur via le formulaire et la liste déroulante ouverte. Mais la liste n'est pas vraiment mise à jour car la liste 'values' sur DropdownMenuView est toujours la même.
Ma question est, comment mettre à jour les «valeurs» après la soumission du formulaire? Est-il possible sans injecter DropdowneMenuView à NewValuesView et la mise à jour manuellement? La seule façon dont je vois maintenant est d'implémenter quelque chose comme "events class", de déclencher un événement après la mise à jour de la valeur et de vérifier cette classe dans getter.
Event holer mise en œuvre factice:
public class EventHolder {
private static boolean event;
public static void fire() {
event = true;
}
public static boolean poll() {
boolean res = event;
event = false;
return res;
}
}
Et page 2:
public class NewValuesView {
@Inject
private ValuesService service;
public void addValue(String newValue) {
service.addValue(newValue);
EventHolder.fire();
}
}
Et page 1:
public class DropdownListView {
...
public List<String> getValues() {
if (EventHolder.poll()) {
values = service.getValues();
}
return values;
}
}
Mais je sais que la logique de mettre à getters/setters est un mauvaise façon.
Alors, des suggestions?
Merci.