- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 3 个 LoadableDetachableModel。在他们的加载方法中,我调用全局变量(同一类)。在两种情况下,模型工作得很好(方法 testModel1(); 和 testModel3();)。
但是!在 testModel2() 中;是第一次调用此页面后的剩余值。我需要解释这怎么可能。
一开始我以为ResourceReference在init之后就不能改变了。然而方法 testModel3() 证明了我并非如此。 (此方法工作正常)。
pastebin.com 上的链接: http://pastebin.com/jiFVWMMW
输出:
构造对象在 testModel1 中值 = 25.26.609在 testModel2 中值 = 25.26.609在 testModel2 中值 = 25.26.609在 testModel3 中值 = 25.26.671在 testModel3 中值 = 25.26.671构造对象在 testModel1 中值 = 25.31.625在 testModel2 中值 = 25.26.609在 testModel2 中值 = 25.26.609在 testModel3 中值 = 25.31.640在 testModel3 中值 = 25.31.640构造对象在 testModel1 中值 = 25.32.125在 testModel2 中值 = 25.26.609在 testModel2 中值 = 25.26.609在 testModel3 中值 = 25.32.140在 testModel3 中值 = 25.32.140
代码:
package app.web;
import java.util.HashMap;
import java.util.Map;
import org.apache.wicket.Resource;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.resources.StyleSheetReference;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.StringResourceStream;
import org.apache.wicket.util.time.Time;
import org.wicketstuff.annotation.mount.MountPath;
/**
* HomePage
*/
@MountPath(path = "home")
public final class HomePage extends WebPage {
private static final long serialVersionUID = 1L;
private static final String DATE_FORMAT = "mm.ss.SS";
transient private final Map cssMap;
public HomePage() {
System.out.println("Constructing object");
cssMap = new HashMap();
cssMap.put("time", Time.now().toString(DATE_FORMAT));
}
@Override
protected void onBeforeRender() {
testModel1();
testModel2();
testModel3();
super.onBeforeRender();
}
/**
* working just fine
*/
private void testModel1() {
add(new Label("message1", new LoadableDetachableModel() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
System.out.println("in testModel1 value = " + ((String) cssMap.get("time")));
return ((String) cssMap.get("time"));
}
}));
}
/**
* DOES NOT UPDATE!!!! (load is being called, but cssMap has original value. WTF?!
*/
private void testModel2() {
add(new StyleSheetReference("cssReference", new ResourceReference("testcss.css") {
private static final long serialVersionUID = 1L;
@Override
protected Resource newResource() {
return new Resource() {
private static final long serialVersionUID = 1L;
@Override
public IResourceStream getResourceStream() {
LoadableDetachableModel LDM = new LoadableDetachableModel() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
System.out.println("in testModel2 value = " + ((String) cssMap.get("time")));
return ((String) cssMap.get("time"));
}
};
return new StringResourceStream(LDM.getObject());
}
};
}
}));
}
/**
* work just fine - StyleSheet is changing...
*/
private void testModel3() {
add(new StyleSheetReference("cssReference2", new ResourceReference("testcss2.css") {
private static final long serialVersionUID = 1L;
@Override
protected Resource newResource() {
return new Resource() {
private static final long serialVersionUID = 1L;
@Override
public IResourceStream getResourceStream() {
LoadableDetachableModel LDM = new LoadableDetachableModel() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
System.out.println("in testModel3 value = " + Time.now().toString(DATE_FORMAT));
return Time.now().toString(DATE_FORMAT);
}
};
return new StringResourceStream(LDM.getObject());
}
};
}
}));
}
}
html 标记:
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
<link wicket:id="cssReference"/>
<link wicket:id="cssReference2"/>
<body>
message1 will be here
</body>
</html>
testcss.css:${时间}
testcss2.css:${时间}
最佳答案
LoadableDetachableModel LDM = new LoadableDetachableModel()
这个模型永远不会分离,也不绑定(bind)到组件。当组件分离时,组件绑定(bind)模型会自动分离,该模型永远不会分离,因此值始终保持不变。
如果你像这样重组你的类,它应该可以工作:
// model should be a field, so detachModels() can see it
private IModel<String> LDM = new LoadableDetachableModel<String>() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
System.out.println("in testModel3 value = " + Time.now().toString(DATE_FORMAT));
return Time.now().toString(DATE_FORMAT);
}
};
public void detachModels() {
super.detachModels();
// detach the model
LDM.detach();
}
private void testModel3() {
add(new StyleSheetReference("cssReference2", new ResourceReference("testcss2.css") {
private static final long serialVersionUID = 1L;
@Override
protected Resource newResource() {
return new Resource() {
private static final long serialVersionUID = 1L;
@Override
public IResourceStream getResourceStream() {
return new StringResourceStream(LDM.getObject());
}
};
}
}));
}
关于java - Wicket LoadableDetachableModel 更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188433/
我们遇到了一个问题,即许多用户访问的页面上有大量 ajax 调用。我们花了很长时间跑下来,终于在LoadableDetachableModel中发现了线程问题。 我认为问题与我们在 session 中
在我的项目中,我使用如下所示的 LoadableDetachableModel。 public ReportPage(final Objectm, final PageReference pr) th
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我想实现两个目标: 我希望我的模型在生命周期内每次都从数据库加载(对于每个请求,只有一个对数据库的请求) 我希望我的模型动态附加到页面,并且 wicket 将为我完成所有这些可矿石绑定(bind) 为
我想实现两个目标: 我希望我的模型在生命周期中每次都从数据库中加载(对于每个请求,只有一个对数据库的请求) 我希望我的模型动态地附加到页面,并且 wicket 将为我完成所有这些可绑定(bind) 为
由于仍然不是 100% 清楚何时应该使用 LDM,所以我尝试了一个简单的内存测试。我使用 DataProvider 创建了一个 DataView,它只是创建了一个包含 100 个实体的列表,其中包含一
我正在使用 loadableDetachableModel 来显示一些组件,它通过在 load 方法中调用 webservice 来获取我第一次想要的数据。但用户会对该模型执行一些操作,例如插入或删除
我正在开发一个基于 Hibernate、Spring 和 Wicket 的 Web 应用程序。 到目前为止,我实现了业务对象和持久层。事务由 Spring 框架的事务拦截器管理。所以DAO类的每个方法
我是一名优秀的程序员,十分优秀!