Eylem arasındaki farkları ve actionListener
action
actionListener
arasındaki fark nedir ve ne zaman action
karşı actionListener
kullanmalıyım?
CEVAP
actionListener
Eğer isterseniz actionListener
bir kanca varöncegerçek iş aksiyon idam, örneğin günlük ve/veya ayarlamak için ek bir özellik (<f:setPropertyActionListener>
), ve/veya gerek erişim bileşeni olan çağrılan eylem (da mevcuttur ActionEvent
bağımsız değişken). Yani, gerçek iş eylem çağrılan gelmeden oluşturma amaçlı tamamen.
actionListener
yöntemi varsayılan olarak şu imza vardır:
import javax.faces.event.ActionEvent;
// ...
public void actionListener(ActionEvent event) {
// ...
}
Ve, herhangi bir yöntem parantez olmadan şu şekilde bildirilmesi gerekiyordu
<h:commandXxx ... actionListener="#{bean.actionListener}" />
Geçemezsiniz unutmayınekEL 2.2 bağımsız değişkenleri. Ancak ActionEvent
bağımsız tamamen özel ve bağımsız değişkeni geçirmeden belirterek(ler) geçersiz kılabilirsiniz. Aşağıdaki örnekler geçerli
<h:commandXxx ... actionListener="#{bean.methodWithoutArguments()}" />
<h:commandXxx ... actionListener="#{bean.methodWithOneArgument(arg1)}" />
<h:commandXxx ... actionListener="#{bean.methodWithTwoArguments(arg1, arg2)}" />
public void methodWithoutArguments() {}
public void methodWithOneArgument(Object arg1) {}
public void methodWithTwoArguments(Object arg1, Object arg2) {}
Argumentless yöntemi ifadede parantez önemini unutmayın. Eğer yok olsaydı, OLUMSUZLUK hala ActionEvent
bağımsız değişken ile bir yöntem beklenir.
EL üstündesin 2.2 , ardından <f:actionListener binding>
ile çok sayıda eylem dinleyicisi yöntemleri bildirebilirsiniz.
<h:commandXxx ... actionListener="#{bean.actionListener1}">
<f:actionListener binding="#{bean.actionListener2()}" />
<f:actionListener binding="#{bean.actionListener3()}" />
</h:commandXxx>
public void actionListener1(ActionEvent event) {}
public void actionListener2() {}
public void actionListener3() {}
binding
öznitelik parantez önemini unutmayın. Eğer yok olsaydı, EL karışacak binding
özniteliği varsayılan olarak çünkü javax.el.PropertyNotFoundException: Property 'actionListener1' not found on type com.example.Bean
bir değer olarak yorumlandığını ifade, bir ifade yöntemi olarak atardı. EL 2.2 tarzı parantez ekleyerek şeffaf bir değer yöntemi bir ifade ifadeye döner. Ayrıca bir bakın.Ç. Why am I able to bind <f:actionListener> to an arbitrary method if it's not supported by JSF?
eylem
Eğer iş bir eylem yürütmek ve gerekirse navigasyon işlemek istiyorsanız action
kullanın. action
yöntem (böylece) navigasyon vaka olarak kullanılacak String
sonuç (hedef görünümü) geri dönebilirsiniz. null
void
dönüş değeri aynı sayfaya geri dönün ve Geçerli Görünüm kapsamı hayatta kalsın. Dönüş değeri boş bir dize ya da aynı görünüm KİMLİĞİ de dönüş için aynı sayfa, ama yeniden görünüm kapsamı ve böylece yok herhangi bir etkin görünümü kapsamlı fasulye ve, eğer varsa, yeniden onları.
action
yöntemi örneğin 64**, EL 2.2 argümanlar kullanan olanlar: herhangi bir geçerli olabilir
<h:commandLink value="submit" action="#{bean.edit(item)}" />
Bu yöntem ile:
public void edit(Item item) {
// ...
}
Eylem yöntemi sadece bir dize döndürür, sonra da sadece action
özniteliği tam olarak bir dize belirtebilirsiniz unutmayın. Bu nedenle, bu tamamen beceriksiz
<h:commandLink value="Go to next page" action="#{bean.goToNextpage}" />
Kodlanmış bir dize döndürüyor: bu anlamsız yöntemi ile
public String goToNextpage() {
return "nextpage";
}
Bunun yerine, sadece doğrudan kodlanmış dize özniteliği
<h:commandLink value="Go to next page" action="nextpage" />
Lütfen bu da kötü bir tasarım gösteren not: YAZI navigasyonu. Bu kullanıcı ne de SEO dostu değildir. Bu When should I use h:outputLink instead of h:commandLink? olarak açıklanmıştır ve çözülmesi gerekiyor
<h:link value="Go to next page" outcome="nextpage" />
Çağırma sırası
actionListener
s her zaman çağrılıröncegörünüm olarak ilan edilmiş ve bu bileşene bağlı olarak aynı sırada action
. Bu yüzden, aşağıdaki örnek
<h:commandLink value="submit" actionListener="#{bean.listener1}" action="#{bean.submit}">
<f:actionListener type="com.example.SomeActionListener" />
<f:actionListener binding="#{bean.listener2()}" />
<f:setPropertyActionListener target="#{bean.property}" value="some" />
</h:commandLink>
bu sıradaBean#listener1()
, SomeActionListener#processAction()
, Bean#listener2()
, Bean#setProperty()
ve Bean#submit()
çağırır.
Özel durum işleme
actionListener
özel bir istisna destekler: AbortProcessingException
. Eğer bu durum actionListener
bir yöntem atılır, sonra AKSARAY kalan eylem dinleyici ve eylem yöntemi atlayın ve doğrudan yanıt oluşturmak için devam edecek. Ancak oturum AKSARAY özel sayfa/bir hata Göremezsiniz. Bu da dolaylı olarak başka bir istisna actionListener
bir yerden atılan her yapılacak. Eğer iş bir istisna olarak bir hata sayfası ile sayfayı engellemek istiyorsanız, o zaman kesinlikle action
yöntemi işi gerçekleştirmek gerekir.
Eğer actionListener
kullanmak için tek nedeni void
yöntem aynı sayfaya dönüyor olması ise, o zaman bu kötü oldu. action
yöntemleri mükemmel ayrıca bazı IDEs EL doğrulama ile inanmak ne aksine void
, dönüş. PrimeFaces showcase örnekler her yerde actionListener
s bu tür ile doludur unutmayın. Bu gerçekten yanlış. Ayrıca kendine bunu yapmak için bir bahane olarak kullanmayın.
NP, NP-Tam arasındaki farkları ve Sabi...
'JSP include Direktifi ile dosyal...
Oracle bir Kullanıcı arasındaki fark v...
Kır ve devam deyim arasındaki fark...
'proc arasındaki fark ne Ruby ve ...