Веб-дизайнер дал мне HTML, который выглядит так:
<div .... style="background: transparent url(xxx.png) 170px center no-repeat">
К сожалению, содержимое изображения xxx.png
создается программным обеспечением, поэтому я сделал его WebResource
и использую следующую стратегию, чтобы сгенерировать URL для ресурса, который я затем вставил в атрибут style=
, используя калитка AttributeModifier
.
// 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)));
Это прекрасно работает, когда я тестирую его локально с помощью Eclipse, но:
- Когда я устанавливаю это в производство, я хочу использовать Apache в качестве прокси для Jetty, чтобы корневой контекст не был виден, то есть Apache перенаправляет запрос
/foo
на Jetty как /context-root/foo
.
- В общем, я не думаю, что это очень элегантно. Я уверен, что я дублирую код Wicket здесь?
Я понимаю, что Wicket решает эту проблему контекстных корней и прокси-серверов Apache, используя только относительные URL-адреса. Это было бы самое элегантное решение, которое я подозреваю. Но если у меня есть, например, IndexedParamUrlCodingStrategy
тогда URL может быть произвольной длины, и я не знаю, сколько ..
включить, чтобы вернуться к /resources
.
Редактировать : Текущее решение состоит в том, чтобы использовать абсолютные URL-адреса, как в моем примере кода выше, и в Apache (a) переписать /context-root/*
в /*
(b), как и раньше, ДОБАВИТЬ корень контекста на все запросы (с) переслать на причал. Таким образом, большинство URL-адресов могут быть без корневого контекста, но некоторые URL-адреса (к моим ресурсам) могут иметь корневой контекст, и это нормально. Но мне не нравится это решение!