web tasarımcısı verdi bana HTML görünüyor ki gibi:URL, bir Wicket paylaşılan kaynağına nasıl alınır?
<div .... style="background: transparent url(xxx.png) 170px center no-repeat">
Maalesef görüntünün
xxx.png
içeriği yazılım tarafından oluşturulur
, bu yüzden bunu bir WebResource
yaptı ve URL'sini oluşturmak için aşağıdaki stratejiyi kullanan yetkili Sonra bir Wicket AttributeModifier
kullanarak style=
özniteliğine yerleştirdiğim kaynak.
// App initialization code
String resourceName = ....;
getSharedResources().add(resourceName, myWebResource);
// Creating the widget
String url = getServletContext().getContextPath()
+ "/resources/org.apache.wicket.Application/" + resourceName ;
String style = "background: transparent url(" + url + ") 170px center no-repeat";
div.add(new AttributeModifier("style", new Model<String>(style)));
Ben yerel olarak Eclipse kullanarak test ancak bu iyi çalışır: Ben üretimde bu yüklediğinizde
- , ben öyle ki bağlam kök değilmi iskelesine vekil olarak Apache sahip olmak istiyorum' t görünür, yani Apache,
/foo
numaralı talebi Jetty üzerine/context-root/foo
olarak iletir. - Genel olarak, bunun çok zarif olduğunu düşünmüyorum. Eminim Wicket kodunu burada kopyalarım?
Wicket'in yalnızca bağıl URL'leri kullanarak bu bağlam bağlamı ve Apache proxy sorununu çözdüğünü anlıyorum. Şüphelendiğim en zarif çözüm bu olurdu. Ama eğer ör. Bir IndexedParamUrlCodingStrategy
sonra URL keyfi uzunluk olabilir ve /resources
geri almak için kaç ..
içerdiğini bilmiyorum.
Düzenleme: Mevcut çözüm ileri yukarıda benim kod örneğinde olduğu gibi mutlak URL'ler kullanmaktır ve Apache (a) /*
içine /context-root/*
(b) daha önce (c) tüm isteklere bağlam kök ADD yeniden İskeleye. Bu şekilde çoğu URL, içerik kökü olmadan olabilir, ancak bazı URL'ler (kaynaklara) bağlam köküne sahip olabilir ve tamamdır. Ama bu çözümü sevmiyorum!
WicketApplication.java soruyu cevaplayın, ancak son satırı biraz basitleştirebilirsiniz: 'yeni SimpleAttributeModifier (" stil ", stil) – Jonik
@Jonik, harika, +1 bahşiş için teşekkürler! –