2012-03-22 12 views
6

Mam stronę, która jest wspierana przez ViewScoped Managed Bean. Strona ma na niej okno dialogowe (używam primefaces), które jest wspierane przez RequestScoped ManagedBean. Zdecydowałem się na przekształcenie zarządzanego żądania komponentu bean w taki sposób, aby było ono usuwane za każdym razem, gdy okno dialogowe zostało uruchomione (w zasadzie przypadek użycia jest taki, że użytkownik otwiera okno dialogowe, wypełnia niektóre dane, a następnie dane są DODAWANE na stronę, która jest wspierany przez ViewScoped Managed Bean).Czy jest to właściwy sposób integracji komponentów bean ViewScoped i RequestScoped?

Sposób, w jaki integruję dwie fasole, odbywa się za pośrednictwem właściwości ManagedProperty w komponencie bean RequestScoped okna dialogowego. tj. fasola ViewScoped jest wstrzykiwana do fasoli RequestScoped. Po zapisaniu okna dialogowego metoda actionListener w oknie dialogowym RequestScoepd Bean aktualizuje właściwość w komponencie bean ViewScoped, który zawiera odwołanie do elementu ManagedBean RequestScoped z bieżącą instancją komponentu bean. Następnie actionListener na zarządzanym komponencie bean ViewScoped jest wywoływany przez komponent bean o żądaniu o zakresie. ActionListneer w zarządzanym komponencie bean ViewScoped może zatem pracować z nowo wprowadzonym modułem ManagedBean RequestScoped.

Czy to dobry sposób na robienie tego, co próbuję zrobić, czy jest lepszy sposób?

Przykładowy kod:

@ManagedBean 
@ViewScoped 
public class PageBackingBean 
{ 
    List<DialogValue> dialogValues; 

    DialogValue dialogValue; 

    public void setDialogValue(DialogValue dialogValue) 
    { 
     this.dialogValue = dialogValue); 
    } 

    public DialogValue getDialogValue() { return dialogValue; } 

    public void handleDialogSave(ActionEvent event) 
    { 
     dialogValues.add(getDialogValue()); 
    } 
} 

@ManagedBean 
@RequestScoped 
public class DialogValue 
{ 
    @ManagedProperty(#{pageBackingBean}) 
    PageBackingBean pageBackingBean; 

    String val1; 
    String val2; 

    // getters/setters ommitted for brevity... 

    public void dialogSave(ActionEvent event) 
    { 
     pageBackingBean.setDialogValue(this); 
     pageBackingBean.handleDialogSave(event); 
    } 
} 

Odpowiedz

2

Współpraca sprawia, że ​​doskonale wyczuwają. Tylko właściwość DialogValue i metoda handleDialogSave() są zbędne w PageBackingBean i mogą być mylące dla przyszłego opiekuna. Możesz też zrobić to po prostu w fasoli podkładowej DialogValue.

public void dialogSave(ActionEvent event) 
{ 
    pageBackingBean.getDialogValues().add(dialogValue); 
} 

A może zmienić nazwę DialogValue do DialogBacking czy coś, co najmniej jego nazwisko nie powinno sugerować, jest tylko model.

Powiązane problemy