【发布时间】:2010-11-01 17:42:33
【问题描述】:
网页设计师给我的 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的请求以/context-root/foo转发到 Jetty。 - 总的来说,我认为这不是很优雅。我确定我在这里复制 Wicket 代码?
我了解 Wicket 仅通过使用相对 URL 解决了上下文根和 Apache 代理的问题。这将是我怀疑的最优雅的解决方案。但如果我有例如IndexedParamUrlCodingStrategy 然后 URL 可以是任意长度,我不知道要包含多少 .. 才能返回到 /resources。
编辑:当前的解决方案是在我上面的代码示例中使用绝对 URL,并在 Apache 中 (a) 像以前一样将 /context-root/* 重写为 /* (b) 然后添加上下文所有请求的根 (c) 转发到 Jetty。这样,大多数 URL 可以没有上下文根,但某些 URL(到我的资源)可以有上下文根,这没关系。但我不喜欢这种解决方案!
【问题讨论】:
-
这不能回答问题,但您可以稍微简化最后一行:
new SimpleAttributeModifier("style", style) -
@Jonik,太好了,+1 感谢您的提示!
标签: wicket