I am getting the following error while working with Wicket 6.19:
Caused by:
org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream$ObjectCheckException:
Not detached model found!
A problem occurred while checking object with type:
com.test.web.components.CurrentUserModel
Field hierarchy is:
[class=com.test.web.base.pages.HomePage, path=0]
private java.lang.Object
org.apache.wicket.MarkupContainer.children
[class=[Ljava.lang.Object;]
java.lang.Object org.apache.wicket.Component.data[1]
[class=com.test.web.HeaderPanel, path=0:headerPanel]
private java.lang.Object
org.apache.wicket.MarkupContainer.children
[class=[Ljava.lang.Object;]
private java.lang.String
org.apache.wicket.markup.html.image.resource.LocalizedImageResource.variation[2]
[class=com.test.web.LoginStatusPanel, path=0:headerPanel:loginStatusPanel]
java.lang.Object
org.apache.wicket.Component.data
[class=com.test.web.components.CurrentUserModel] <----- field that is
causing the problem
Code:
@RequireHttps
public class HomePage extends WebPage {
private HeaderPanel headerPanel;
private LoginStatusPanel loginStatusPanel;
private MenuPanel menuPanel;
public HomePage(String id) {
super();
initialize();
}
public HomePage(String id, PageParameters parameters) {
super(parameters);
initialize();
}
@Override
protected void onInitialize() {
Request request = RequestCycle.get().getRequest();
if (request instanceof ServletWebRequest)
{
ServletWebRequest wr = (ServletWebRequest)
request;
HttpSession session =
wr.getContainerRequest().getSession();
if (session != null) {
}
}
super.onInitialize();
}
public String getApplicationId(){
return applicationId;
}
private void initialize() {
add(headerPanel = new HeaderPanel("headerPanel"));
headerPanel.add(loginStatusPanel = new
LoginStatusPanel("loginStatusPanel"));
headerPanel.add(menuPanel = new MenuPanel("menuPanel"));
}
}
public class HeaderPanel extends Panel {
private Label headerTitleLbl;
public HeaderPanel(String id) {
super(id);
add(headerTitleLbl=new Label("headerTitle",
WebApplication.getAppTitle()));
headerTitleLbl.setOutputMarkupId(true);
}
}
public class LoginStatusPanel extends Panel {
public LoginStatusPanel(String id) {
super(id, new CurrentUserModel()); // Line 1
}
protected void onInitialize() {
IModel<Authentication> authModel =
(IModel<Authentication>)
getDefaultModel();
final Authentication auth = authModel.getObject();
if (auth != null && auth.isAuthenticated() && !(auth
instanceof
AnonymousAuthenticationToken))
{
Fragment fragment = new Fragment("frag",
"loggedInFragment", this);
Label status;
fragment.add(status = new Label("status",
"Logged in as "));
fragment.add(new Label("userId", new
PropertyModel<String>(authModel,
"name")));
add(fragment);
}
else
{
Fragment fragment = new Fragment("frag",
"loggedOutFragment", this);
fragment.add(new Label("status", "Logged out"));
fragment.add(new ExternalLink("login",
"/LoginPage", "Log In"));
add(fragment);
}
super.onInitialize();
}
}
public class MenuPanel extends Panel {
public MenuPanel(String id) {
super(id);
add(new MenuPanel("menu",
WebApplication.getMenuList()));
}
}
public class CurrentUserModel extends
LoadableDetachableModel<Authentication> {
protected Authentication load() {
return
SecurityContextHolder.getContext().getAuthentication();
}
}
Note: If I update the code in comment marked as 'Line 1' with the following:
super(id, new
Model(SecurityContextHolder.getContext().getAuthentication()));
The error doesn't show up, that might be because its not a
LoadableDetachableModel.
Is it possible to pass an instance of LoadableDetachableModel to Component
class constructor?
I am getting the same error for the following code as well:
tree = new NestedTree<TreeItem>("tree", provider, state);
Where state is an instance of the following class:
private class TreeItemExpansionModel extends
LoadableDetachableModel<Set<TreeItem>>
{
private static final long serialVersionUID = 1L;
private final String treePanelId;
public TreeItemExpansionModel(String treePanelId) {
this.treePanelId = treePanelId;
}
@Override
protected Set<TreeItem> load() {
return TreeItemExpansion.get(treePanelId);
}
@Override
public boolean equals(Object obj) {
if (obj instanceof TreeItemExpansionModel) {
return ((TreeItemExpansionModel)
obj).treePanelId.equals(treePanelId);
}
return false;
}
@Override
public int hashCode() {
return treePanelId.hashCode();
}
}
And the error is as follows:
Caused by:
org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream$ObjectCheckException:
Not detached model found!
A problem occurred while checking object with type:
com.test.web.components.TreeItemProvider$TreeItemModel
Field hierarchy is:
[class=com.test.web.admin.pages.HomePage, path=0]
private java.lang.Object
org.apache.wicket.MarkupContainer.children
[class=[Ljava.lang.Object;]
java.util.List
com.test.web.components.WhistlePanel.selectionList[2]
[class=com.test.web.NavPanel, path=0:navPanel]
private java.lang.Object
org.apache.wicket.MarkupContainer.children
[class=org.apache.wicket.extensions.markup.html.repeater.tree.NestedTree,
path=0:navPanel:tree]
private java.lang.Object
org.apache.wicket.MarkupContainer.children
[class=org.apache.wicket.extensions.markup.html.repeater.tree.nested.Subtree,
path=0:navPanel:tree:subtree]
private java.lang.Object
org.apache.wicket.MarkupContainer.children
[class=org.apache.wicket.markup.repeater.RefreshingView,
path=0:navPanel:tree:subtree:branches]
private java.lang.Object
org.apache.wicket.MarkupContainer.children
[class=[Ljava.lang.Object;]
private java.lang.Object
org.apache.wicket.MarkupContainer.children[0]
[class=org.apache.wicket.extensions.markup.html.repeater.tree.nested.BranchItem,
path=0:navPanel:tree:subtree:branches:1]
java.lang.Object
org.apache.wicket.Component.data
[class=com.test.web.components.TreeItemProvider$TreeItemModel] <----- field
that is causing the problem
Thanks in advance.
--
View this message in context:
http://apache-wicket.1842946.n4.nabble.com/Error-Not-detached-model-found-tp4672624.html
Sent from the Users forum mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]