3 개의 LoadableDetachableModels가 있습니다. 그들의 load 메소드에서 (나는 같은 클래스의) 전역 변수를 호출한다. 두 경우 모델은 잘 작동합니다 (testModel1() 메서드 및 testModel3();).Wicket LoadableDetachableModel 업데이트 문제
BUT! testModel2(); 이 페이지를 처음 호출 할 때 남은 값입니다.
나는 그것이 어떻게 가능할까요?
처음에는 init 다음에 ResourceReference를 변경할 수 없다고 생각했습니다. 그러나 testModel3() 메서드는 그렇지 않으면 나를 증명했습니다. (이 방법은 올바르게 작동합니다). pastebin.com에
링크 : http://pastebin.com/jiFVWMMW
OUPUT : testModel1 값 객체를 구성
= testModel2 값 25.26.609 = testModel2 값 25.26.609 = 25.26.609에 testModel3 값 = 25.26.671 in testModel3 값 = 25.26.671 개체를 testModel1 값으로 생성 = 25.31.625 testModel2 값 = 25.26.609testModel1 값 객체를 구성 testModel2 값 = 363,210 testModel3 값 25.26.609 = testModel3 값 25.31.640 = 25.31.640 = testModel2 값 25.32.125 = testModel2 값 25.26.609 = 25.26. testModel3 값 = 609 testModel3 값 25.32.140 = 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 태그 :
012,369,442 976,335,326,335,218,393,210testcss.css : $ {시간}
testcss2.css : $ {시간}
가 왜 onBeforeRender에서 LDMS를 초기화 할()? 그리고 왜 cssMap (LDM2에 대한 지지자)이 일시적입니까? – bert
'delete delete'을 게시 할 필요가 없습니다. 질문을 삭제할 수있는 링크가 있습니다. 그것을 사용하십시오. – Nishant