2010-02-02 12 views
6

Son zamanlarda bahar formu taglib ile uğraşıyorum ve oldukça rahatsız edici bir fenomene rastladım.Spring form taglib devre dışı bırakılmış özniteliğin gerçekten bir dizeye çözülmesi gerekiyor mu?

<form:select path="whatever" disabled="${true}"> 

özürlü IS seçkin eleman hale Will

<form:select path="whatever" disabled="${'true'}"> 

devre dışı DEĞİLDİR seçkin eleman hale olacaktır.

Bu, etiketin o öznitelikte bir dize beklediğini ve herhangi bir boole değerini zorlamayı reddettiğini gösterir (muhtemelen önce türünü denetleme).

Etki, sistemimizde oldukça sık gerçekleşen bir şey olan <form:select path="whatever" disabled="${someOtherfield.selectedId != -1}" /> gibi bir şey yapamıyorum.

Sadece form taglibs işlevinin bazı kısımlarını kaçırıyor muyum? Bu meşru bir tasarım kararı mı? Bir kusur mu?

+0

Spring forum ve/veya JIRA bu yükselterek önerecektim ama zaten kendiniz ve bir JIRA sorunu :) – skaffman

+0

Ben henüz bir bütün dişe sahip bkz Bahar forumundaki sorularımın bir cevabını aldım, sanırım birkaç yıl içinde 10 civarında iş parçacığı var. Yani hala denemeye devam ederken, ben sadece oraya gönderiyorum çünkü doğru yer olduğunu hissediyorum. Hiçbir cevap vermenin mümkün olmadığının farkında değilim. –

cevap

5

Tamam, biraz daha bu bir çevrede kazma vermedi: is

, aşağıdaki kod onlar disabled niteliğini boolean yaparsanız işe yaramaz.

http://forum.springsource.org/showthread.php?t=84102

sorun JSP olacak hep dönüş el değerlendiren ve körlemesine bu yöntemi kullanarak bir Boolean Bir dize karşılaştırma "gerçek" .equals

kullanarak o değerlendirmenin sonucunu karşılaştırarak olmasıydı false, türün eşleşmemesi nedeniyle kesinlikle bir kusurdur.

Neyse ki, hatadaki isDisabled yöntemi korumalı bir astardır, bu yüzden 8 giriş etiketini etkileyerek ve bu yöntemi geçersiz kılarak daha hafif bir karşılaştırma yapmak için çalışabilirim.

Yani cevap, evet, bu bir kusur, ve skaffman'ın yorumlarından, JSP EL'nin uygulandığı gibi çok iyi bir şekilde güncellenemeyen eski bir kütüphaneyle ilgili bir sorun gibi görünüyor. cevaplarınız çocuklar için

Teşekkür

1

Bu biraz garip, yeterince doğru. Yay kaynağı kodu, SelectTag'un disabled özelliğinin boolean değil String olduğunu gösterir. Bu açıkça yapılması gereken doğru şey değil, ama hala eski nedenlerden ötürü olduğundan şüpheliyim (ilkbahar-form. JSP EL'den önce). Bu boolean'u String içine zorlamak için JSP çalışma zamanına kadar bırakır ve görünüşe göre bunu yapmayacaktır. Bu konuda daha az şaşkınlık duyuyorum, çünkü JSP EL kötü şöhretli.

Yani iki yarı kırık uygulama arasında sıkışmışsınız. Sadece String değerlerini bu özniteliğe ilettiğinizden emin olmanız gerekir.

+0

görebildiğimden, tld hem JSP2 EL hem de JSP1 EL'yi destekleyen bir yay değerlendirme mekanizmasını kullanıyor, bu yüzden bence bir tasarımda yetersiz bir uyumluluktan ziyade geriye dönük uyumluluğu sürdürmeye çalışan küçük bir hata. –

0

Bu tasarımın nedeni, kapsayıcıyı değerlendirmediğinde EL ifadesi değerlendirmesini zorlamak için özel bir geri dönüş koduna sahip olmalarıdır. Örneğin, bu kod:

<%@ page isELIgnored = "true" %> 
... 
${'Simple text'} <spring:message text = "${'Message text'} />" 

bazı garip eski konteyner yapılandırmaları için kullanışlı bir yöntem Muhtemelen ${'Simple text'} Message text

üretir. alternatif çözüm çok çirkin aradılar çünkü

<%@ page isELIgnored = "true" %> 
... 
<form:select ... disabled = "${true}" />  
İlgili konular