網頁設計師給我的HTML看起來像:如何獲取Wicket共享資源的URL?
<div .... style="background: transparent url(xxx.png) 170px center no-repeat">
不幸的是,圖像xxx.png
的內容是由軟件生成的,所以我做了它WebResource
並使用以下策略來生成的URL然後我使用Wicket AttributeModifier
將該資源嵌入style=
屬性中。
// 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作爲代理,碼頭使得上下文根ISN」 t可見,即Apache將
/foo
的請求轉發給Jetty,作爲/context-root/foo
。 - 一般來說,我覺得這不是很優雅。我確定我在這裏複製Wicket代碼?
我知道Wicket通過僅使用相對URL解決了上下文根和Apache代理的這個問題。這將是我懷疑的最優雅的解決方案。但是如果我有例如一個IndexedParamUrlCodingStrategy
然後URL可以是任意長度,我不知道有多少..
包括回/resources
。
編輯:目前的解決方案是使用絕對URL如上述我的代碼示例,並且在Apache中的(a)重寫/context-root/*
成/*
(b)中如在此之前的上下文根添加到所有請求(c)向到碼頭。這樣,大多數URL可以沒有上下文根,但一些URL(對我的資源)可以有上下文根,並且沒問題。但我不喜歡這個解決方案!
這沒有按」 t回答這個問題,但是可以簡化最後一行:'new SimpleAttributeModifier(「style」,style)' – Jonik 2010-11-01 20:08:45
@Jonik,太棒了,+1謝謝你的提示! – 2010-11-02 15:19:51