2010-11-10 11 views
13

için istemi JSF 1.2 webapp'ımda, bir destekleyici üzerinde bir eylem yöntemi çağırır <h:commandButton> içeren bir sayfam var. Bu işlem, verilerin veritabanında kaldırılmasına/değiştirilmesine neden olacak, bu yüzden kullanıcının komut düğmesine yanlışlıkla tıkladığı durumlardan kaçınmak istiyorum.JSF - JavaScript'i nasıl uygularım? "Emin misiniz?" Bir <h: commandButton>

Basit bir "Uygulamadan Emin misiniz?" JavaScript kullanarak "Evet/Hayır" veya "Tamam/İptal" seçenekleriyle bilgi isteyin. JavaScript ile harika değilim ve daha önce JSF ile JavaScript'i hiç karıştırmam. Bunu nasıl uygulayacağımı göstermek için herhangi bir kod snippet'i olan var mı?

<h:commandButton 
    id="commandButtonAcceptDraft" 
    title="#{bundle.tooltipAcceptDraft}" 
    action="#{controller.actionReplaceCurrentReportWithDraft}" 
    image="/images/checkmark.gif"> 
</h:commandButton> 

ÇÖZÜM: BalusC tarafından sağlanan

çözüm gayet güzel çalıştı İşte

Ben komut düğmesini beyan benim JSP sayfasının parçasıdır. Ayrıca, kaynak metin olarak bir metin paketinden metin kullanmanın kolay olduğunu belirtmek istedim. Benim sayfasında, böyle bir eleman ile kaynak paketi yüklemek:

<f:loadBundle basename="com.jimtough.resource.LocalizationResources" var="bundle" /> 

<f:loadBundle> senin <f:view> içinde olmalıdır. Ardından, BalusC tarafından sağlanan kodu komut düğümü öğesine ekledim, ancak 'Emin misin?' Için kaynak grubumdan bir dize koyuyorum. Böyle metin,:

<h:commandButton 
    id="commandButtonAcceptDraft" 
    title="#{bundle.tooltipAcceptDraft}" 
    action="#{controller.actionReplaceCurrentReportWithDraft}" 
    image="/images/checkmark.gif" 
    onclick="return confirm('#{bundle.confirmationTextAcceptDraft}')"> 
</h:commandButton> 

İngilizcemi kaynak dosyası hat (anahtar/değer çiftleri ile sadece düz metin dosyası) aşağıdaki gibidir:

# text displayed in user prompt when calling confirm() 
confirmationTextAcceptDraft=This will overwrite the current report and cannot be undone. Are you sure? 

cevap

26

JavaScript'i confirm() işlevini kullanın. boolean değerini döndürür. Yanlış döndürürse, düğmenin varsayılan eylemi engellenir, aksi halde devam edilir. Zaten boolean döndürür yana

<h:commandButton onclick="return confirm('Are you sure?')" /> 

, diğer cevaplar önerdiği bir if bir de etrafına sarın gerek kesinlikle yoktur.

+0

@CoolBeans çözümü benim durumumda doğrudur, aksi halde eylem sayfayı yeniden yükler.MyFaces ve BootsFaces kullanıyorum – MitchBroadhead

+0

@MitchBroadhead Sonra JSF impl veya söz konusu bileşen kitaplığı onclick özniteliğini yanlış bir şekilde üretir. Sadece oluşturulan HTML çıktısına bakın ve sorumlu geliştiriciye sorun bildirin. – BalusC

+1

BootsFaces'de bir hata yaptım ve Stephan şimdi sorunu çözdü – MitchBroadhead

1

emin değilim hangi etkinlik sizi JSF'yi hiç kullanmadığım için dinlemem gerekecek. Genel olarak konuşursak, bu işe yaramalı.

+1

GetElementById için javascript kullanmak istiyorsanız, form adını eklemeniz gerekeceğine inanıyorum. JSF'de öğenin asıl kimliği 'formName: commandButtonAcceptDraft' – bmeding

3

javascript'i düğmenin onclick'ine ekleyebilirsiniz.

<h:commandButton 
    id="commandButtonAcceptDraft" 
    title="#{bundle.tooltipAcceptDraft}" 
    action="#{controller.actionReplaceCurrentReportWithDraft}" 
    onclick="return confirm('Are you sure?')" 
    image="/images/checkmark.gif"> 
</h:commandButton> 
+0

gibi bir olay olacaktır. Etkinliklerinizi satır içi değil, harici bir komut dosyasına eklemenin avantajları vardır. Bu işe yarıyor, ancak çok sayıda öğeye eklemeniz gerekiyorsa veya iletiyi gelecekte değiştirmeniz gerektiğinde kolayca düzenlenemez. – zzzzBov

2

Çalışması gerekir. İdeal olarak bir java script dosyasında olmalı.

<h:commandButton 
    id="commandButtonAcceptDraft" 
    title="#{bundle.tooltipAcceptDraft}" 
    action="#{controller.actionReplaceCurrentReportWithDraft}" 
    image="/images/checkmark.gif" 
    onclick="if (!confirm('Are you sure?')) return false"> 
</h:commandButton> 
+1

Bu, benim durumumda doğru çözümdür. @BalusC çözümü, MyFaces ve BootsFaces ile sayfanın yeniden yüklenmesine neden olur. Emin değilim neden. – MitchBroadhead