如果您想将文件保存在 webapp 根目录上,您可以创建自己的IResource
,甚至使用。ContextRelativeResource
rules.js
在您WebApplication
必须将资源注册为共享资源:
@Override
public void init() {
super.init();
getSharedResources().add(RULES_RESOURCE_KEY, new ContextRelativeResource(RULES_CONTEXT_FILE));
}
public static ResourceReference getRulesResourceReference() {
return Application.get().getSharedResources().get(Application.class, RULES_RESOURCE_KEY, null, null, null, true);
}
这是一个修改rules.js
文件的示例方法。
public static void changeRules() {
try {
// Get a context URL
URL rules = WebApplication.get()
.getServletContext()
.getResource(RULES_CONTEXT_FILE);
// Update the file
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new File(rules.toURI())));
out.write("var rules=\"" + Long.toHexString(System.currentTimeMillis()) + "\" ");
out.close();
} catch (Exception e) {
throw new WicketRuntimeException(e);
}
}
在您的HomePage
课堂上或您需要的任何地方更新rules.js
:
public HomePage(final PageParameters parameters) {
super(parameters);
add(new Link("changerules") {
@Override
public void onClick() {
WicketApplication.changeRules();
}
});
}
在您Form
添加的页面上JavaScriptHeaderItem
:
@Override
public void renderHead(IHeaderResponse response) {
response.render(
JavaScriptHeaderItem.forReference(WicketApplication.getRulesResourceReference())
);
}
如果你想测试它,运行这个例子的 HTML:
<html>
<body onload="alert(rules);">
<a wicket:id="changerules" href="#">Change rules files</a>
</body>
</html>
并且不要忘记rules.js
在您的webapp
文件夹中创建初始版本。
我认为更新文件夹中的文件不是一个好主意webapp
,因为容器可以在重新部署时将其替换为初始版本。所以最好使用自己的 IResource 并将文件放在外部文件夹中。如果您需要更多详细信息,请查看此帖子。