网页设计师给我的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