我使用 Apache Wicket 作为我的 Web 应用程序框架,并且具有以下结构:
我需要什么:
1) JavaScript 文件 Rules.js 应该加载并可供我的自定义 Java 类 Process.java 读取。因为在我的 Process.java 中我有这样的东西:
private String readFile(String filename) throws IOException {
File file = new File("PATH");
//reads the file and returns a string
...
}
所以第一个问题是:当我的资源 Rules.js 位于资源文件夹或任何其他包文件夹中时,我应该使用什么路径而不是“PATH”?
2) Process.java 不仅读取文件,还使用 json 等操作我的 Rules.js 文件。因此,应将以下行添加到 Rules.js 文件中:
var object = {JSON STRING};
我已经知道该怎么做了。
3) 在操作 Rules.js 文件之后,它当然应该自动更新。 所以第二个问题是:我还应该添加什么以及在我的应用程序中添加什么,以便 Rules.js 是一个可用于我的应用程序中所有需要的类的文件,并且在 session 期间始终是最新的。强>
我已经尝试了很多东西,但我错过了一些我无法弄清楚的东西......
最佳答案
如果您想将 rules.js
文件保留在 Web 应用程序根目录上,您可以创建自己的 IResource
,甚至可以使用 ContextRelativeResource
。
在您的 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>
并且不要忘记在您的 webapp
文件夹中创建 rules.js
的初始版本。
我认为更新 webapp
文件夹中的文件不是一个好主意,因为容器可以在重新部署时将其替换为初始版本。所以最好使用自己的 IResource 并将文件放在外部文件夹中。检查这个post如果您需要更多详细信息。
关于javascript - 正确加载 Web 应用程序框架 (wicket) 中的资源 (javascript)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443361/