网页设计师给了我看起来像的HTML:
<div .... style="background: transparent url(xxx.png) 170px center no-repeat">
不幸的是,图像xxx.png
的内容是由软件生成的,因此我将其设为WebResource
并使用以下策略生成资源的URL,然后我将其嵌入{ {1}}属性使用Wicket style=
。
AttributeModifier
当我使用Eclipse在本地测试时,这可以正常工作,但是:
// 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)));
的请求转发到Jetty上/foo
。 我理解Wicket只使用相对URL解决了上下文根和Apache代理的问题。这将是我怀疑的最优雅的解决方案。但是如果我有例如/context-root/foo
然后网址可以是任意长度,我不知道要包含多少IndexedParamUrlCodingStrategy
才能返回..
。
编辑:当前的解决方案是使用上面的代码示例中的绝对URL,并在Apache(a)中将/resources
重写为/context-root/*
(b),就像之前一样然后将上下文根添加到所有请求(c)转发到Jetty。这样,大多数URL可以没有上下文根,但是某些URL(对我的资源)可以具有上下文根,并且没有问题。但我不喜欢这个解决方案!
答案 0 :(得分:13)
如果从组件(或页面)内部调用代码:
urlFor(new ResourceReference("sharedResourceName"));
或
RequestCycle.get().urlFor(new ResourceReference("sharedResourceName"));
下面的示例应用程序。为简单起见,我使用了ByteArrayResource,但任何Resource子类都会这样做:
WicketApplication.java
package app1;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.target.coding.IndexedParamUrlCodingStrategy;
import org.apache.wicket.resource.ByteArrayResource;
public class WicketApplication extends WebApplication {
@Override
protected void init() {
super.init();
getSharedResources().add("testResource", new ByteArrayResource("text/plain", "This is a test".getBytes()));
mount(new IndexedParamUrlCodingStrategy("home/very/deep/folder", getHomePage()));
}
public Class<HomePage> getHomePage() {
return HomePage.class;
}
}
HomePage.java
package app1;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.WebPage;
public class HomePage extends WebPage {
public HomePage(final PageParameters parameters) {
CharSequence resourceHref = urlFor(new ResourceReference("testResource"));
add(new Label("link", "Click me!")
.add(new SimpleAttributeModifier("href", resourceHref)));
}
}
HomePage.html
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
<body>
<a wicket:id="link"></a>
</body>
</html>
答案 1 :(得分:0)
我认为this answer中用于创建动态图片网址的策略将适用于此处。