2012-03-22 21 views
6

ViewScoped Yönetilen Bean tarafından desteklenen bir sayfam var. Sayfada bir RequestScoped ManagedBean tarafından desteklenen bir iletişim kutusu (primefaces kullanıyorum) vardır. İletişim kutusunun yönetilen fasülye talebini, diyaloğun başlatıldığı herhangi bir zamanda silinecek şekilde ayarlamayı seçtim (temelde kullanım durumu, kullanıcının diyaloğu açması, bazı verileri doldurması ve daha sonra verilerin sayfaya eklenmesidir. ViewScoped Yönetilen Bean tarafından desteklenmektedir.Bu, ViewScoped ve RequestScoped Bean'i bütünleştirmenin doğru yolu mu?

İki fasulyeyi bütünleştirdiğim yol, iletişim kutusunun RequestScoped fasulyesinde bir ManagedProperty aracılığıyladır. yani ViewScoped fasulye, RequestScoped fasulyesine enjekte edilir. İletişim kutusunun kaydedilmesinde, Dialog'un RequestScoepd Bean'inde bulunan bir actionListener yöntemi, özelliği, Bean'in geçerli örneğiyle RequestScoped ManagedBean öğesine başvuruda bulunan ViewScoped Bean'de güncelleştirir. Sonra ViewScoped yönetilen fasulye üzerindeki actionListener istek scoped fasulye tarafından çağrılır. ViewScoped yönetilen fasulyedeki actionListneer, yeni enjekte edilmiş RequestScoped ManagedBean ile çalışabilir.

Bu, yapmaya çalıştığım şeyi yapmanın iyi bir yolu mu yoksa daha iyi bir yolu var mı?

örnek 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); 
    } 
} 

cevap

2

işbirliği mükemmel mantıklı. Yalnızca DialogValue özelliği ve handleDialogSave() yöntemi, PageBackingBean'da gereksizdir ve gelecekteki sürdürücü için kafa karıştırıcı olabilir. Bunun yerine sadece bunu DialogValue destek fasulyesinde yapabilirsiniz.

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

Ve belki DialogValue DialogBacking falan, en azından Adından sadece bir model olmaktan önermek olmamalıdır adlandırın.

İlgili konular