Wicket:刷新浏览器时未加载对 HTML 或 Java 源的更改
Posted
技术标签:
【中文标题】Wicket:刷新浏览器时未加载对 HTML 或 Java 源的更改【英文标题】:Wicket: Changes to HTML or Java Source is not loaded when browser is refreshed 【发布时间】:2014-10-03 17:53:48 【问题描述】:我正在关注 Wicket 用户指南的“Hello World”项目。
Wicket 处于开发模式。
当我更改 HomePage.html 并重新加载浏览器时,未显示更改。如果我重新启动 WicketApplication,则会显示更改。
我的应用程序位于 localhost 8080
我的所有研究都表明,当应用程序处于开发模式(确实如此)时,应该自动加载更改。
我没有更改默认 Wicket 安装的任何配置。
【问题讨论】:
您可以使用Jrebel 强制重新加载应用服务器上更改的源。不过,这是有代价的。 【参考方案1】:我想出了一个不同的解决方案。因为我使用的是 Google App Engine,所以当我添加代码时 getResourceSettings().setResourcePollFrequency(Duration.ONE_SECOND) 到我的应用程序 init() 方法,应用程序无法加载页面。这与 App Engine 不支持多线程这一事实有关。正因为如此,我不得不找到一个不同的解决方案。相反,我决定当我处于开发模式时,我会完全删除 MarkupCache。为此,我需要创建一个新的无缓存 MarkupFactory。
public class CachelessMarkupFactory extends MarkupFactory
@Override
public IMarkupCache getMarkupCache()
return null;
@Override
public boolean hasMarkupCache()
return false;
然后在我的 WebApplication 代码中,我将新的 CachlessMarkupFactory 设置为默认 MarkupFactory。
@Override
protected void init()
super.init();
//in dev mode, disable markup cache
if(isDevelopmentServer())
getMarkupSettings().setMarkupFactory(new CachelessMarkupFactory());
【讨论】:
【参考方案2】:这是我找到的解决方案。
对于类重载问题,我在 IntelliJ 中通过调试模式运行“启动”应用程序。在调试模式下,IntelliJ 会重新加载已更改的类。
对于 HTML 重新加载问题,我将以下代码放在 WicketApplication init() 方法中:
// add your configuration here
getResourceSettings().setResourcePollFrequency( Duration.ONE_SECOND);
getResourceSettings().setDefaultCacheDuration(Duration.ONE_SECOND);
List list = new ArrayList();
list.add( new IResourceFinder()
@Override
public IResourceStream find( Class<?> clazz, String pathname )
File f = new File( "C:/MyProject/src/main/java/" + pathname );
if ( f.exists() )
return new FileResourceStream( f );
return null;
);
getResourceSettings().setResourceFinders( list );
getResourceSettings().setUseDefaultOnMissingResource(true);
【讨论】:
【参考方案3】:不,如果您将应用程序部署到应用程序服务器(如 tomcat、glassfish 等),那么真正的 .html 会显示在位于应用程序服务器文件夹某处的浏览器中。
对于 glassfish,它可以是“/path_to_glassfish/glassfish/domains/domainXX/applications/APP_NAME/WEB-INF/classes/...”。 因此,即使您在项目中更改了 .html,也必须重新部署这些更改。
Wicket JavaDoc 说:
如果配置类型为 DEVELOPMENT,则轮询资源 变化...
是的,但适用于位于相应文件夹的资源。我认为this wicket forum thread 会给你一些关于如何实现你想要的行为的答案。这篇文章实际上是针对旧的wicket版本的,但我认为它也适用于较新的版本。
在我们公司,我们使用firebug或chrome控制台直接在浏览器中对组件进行样式化,而无需重新部署应用程序,这对我们来说已经足够了,因为html页面上很少添加静态组件。
【讨论】:
以上是关于Wicket:刷新浏览器时未加载对 HTML 或 Java 源的更改的主要内容,如果未能解决你的问题,请参考以下文章
当我在 Chrome 中保存对 html 文件的更改时自动重新加载浏览器?
列表视图在 jQuery mobile/phonegap 中初始时未加载