Steps to create Mini application are here: https://wicket.apache.org/start/quickstart.html :))
On Tue, 8 Nov 2022 at 15:01, Martin Grigorov <mgrigo...@apache.org> wrote: > Hi, > > Please try to reproduce the problem in a mini application and share it > with us! > > On Tue, Nov 8, 2022 at 9:41 AM Laurent Duparchy <dupar...@esrf.fr> wrote: > >> Hi, >> >> I got rid of this javascript error, that was due to incorrect design, I >> think. >> >> devicesGroup is a CheckGroup >> >> devicesGroup = new CheckGroup<Device>("devicesGroup", new ArrayList()) { >> @Override >> public boolean isVisible() { >> super.isVisible(); >> ..... >> }; >> }; >> >> >> >> but it contained also what seems to be a useless CheckGroupSelector. >> >> // devicesGroup.add(new CheckGroupSelector("devicesGroupSelector")); >> >> >> So, the javascript error is gone but the Ajax rendering is still flawed. >> >> When I add both feedbackpanel and devicesGroup, nothing is rendered the >> Ajax response is as follow >> >> >> >> id5 being the feedbackpanel (which is empty in the response) >> id7 being the devicesGroup which still contains the deleted line. >> >> All in all, this response does not take into account the added component >> for repainting. I added them to the Ajax "target" but perhaps I need to add >> them to a "parent" ? >> >> I recall that if I add only the feedbackpanel for Ajax rendering, it is >> well painted. >> >> generated markup : >> >> <body><div id="container"> <div id="content"> <div >> id="header">WakeOnLan Utility <h1>Utility to >> start / wake up a computer</h1> <div >> id="signOut"><a href="./?6-2.-signOut">Sign Out</a></div> </div> >> <div id="feedbackContainer"> <div id="id5"> </div> >> </div> <div> <form id="id6" method="post" >> action="./?6-2.-wakeUpForm"><div id="id6_hf_0" hidden="" >> class="hidden-fields"></div> <div id="id7"> >> <table class="wakeUptable" border="1"> <thead> >> <tr> >> >> >> >> >> >> >> >> >> >> >> >> >> *Laurent Duparchy ESRF - The European Synchrotron MIS Unit 04 76 88 22 56* >> Martin Grigorov wrote on 07/11/2022 20:57: >> >> Hi Laurent, >> >> The problem is the JavaScript error: Uncaught TypeError: b is null. >> >> It seems there is some bug in >> "Wicket.CheckboxSelector.updateSelectorState(c,e)},initializeSelector:function(c,d){var >> b=document.getElementById(c); ..." >> >> Due to this JS error Wicket cannot replace neither the feedback panel nor >> any other component. >> >> You should focus on debugging the JavaScript. If you don't know how to do >> it then please create a quickstart app that reproduces the problem and >> share it with us. >> >> >> On Mon, Nov 7, 2022 at 6:37 PM Laurent Duparchy <dupar...@esrf.fr> >> <dupar...@esrf.fr> wrote: >> >> >> If I add the entire page (which is defeating the entire "Ajax" idea.... I >> think.), it works. The new list is painted >> > target.get().add(getPage()); >> >> If I add only the feedback panel, it is is painted. >> > target.get().add(feedbackPanel); >> >> If I add both, the feedbackpanel is not painted... Go figure. >> >> I probably don't understand what a "target" is and I'm giving up that. >> Sorry for being an annoyance. >> >> >> *Laurent Duparchy >> ESRF - The European Synchrotron >> MIS Unit >> 04 76 88 22 56* >> Laurent Duparchy wrote on 03/11/2022 10:11: >> >> Yes I corrected that HTML too. (which was auto-corrected by browsers I >> >> think, at least by Firefox). >> >> I looked for errors in Firefox debugger. The console reports a warning >> >> then an error in a generated js : >> >> Warning : >> >> jQuery.Deferred exception: b is null updateSelectorState@ >> >> https://xxxxxx/misapps/wakeOnLan/wicket/resource/org.apache.wicket.markup.html.form.AbstractCheckSelector/CheckSelector-ver-1CE61F040D59ED57EADC3FBB51E1E02C.js:1:392 >> attachUpdateHandlers@https://xxxxxx.esrf.fr/misapps/wakeOnLan/wicket/resource/org.apache.wicket.markup.html.form.AbstractCheckSelector/CheckSelector-ver-1CE61F040D59ED57EADC3FBB51E1E02C.js:1:598 >> >> Error : >> >> >> Uncaught TypeError: b is null >> >> in >> >> >> >> (function(a){if(typeof(Wicket.CheckboxSelector)==="object"){return}Wicket.CheckboxSelector={updateAllCheckboxes:function(f,e){var >> d=e();for(var b=0;b<d.length;b++){var >> c=d[b];if(c.checked!==f){c.click()}}},updateSelectorState:function(e,g){var >> f=g(),c=f.length>0;for(var >> d=0;d<f.length;d++){if((f[d].disabled===false)&&(f[d].checked===false)){c=false;break}}var >> b=document.getElementById(e);b.checked=c},attachUpdateHandlers:function(c,e){var >> d=e(),f=function(){Wicket.CheckboxSelector.updateSelectorState(c,e)};for(var >> b=0;b<d.length;b++){Wicket.Event.add(d[b],"click",f)}Wicket.CheckboxSelector.updateSelectorState(c,e)},initializeSelector:function(c,d){var >> b=document.getElementById(c);Wicket.Event.add(b,"click",function(){Wicket.CheckboxSelector.updateAllCheckboxes(b.checked,d)})},findCheckboxesFunction:function(c,b){return >> function(){var d=[];var >> g=document.getElementById(c).getElementsByTagName("input");for(var >> e=0;e<g.length;e++){var f=g[e];if(f.name===b){d.push(f)}}return >> >> d}},getCheckboxesFunction:function(b){return function(){var >> >> c=[];for(var e=0;e<b.length;e++){var >> d=document.getElementById(b[e]);if(d){c.push(d)}}return c}}}})(); >> >> *Laurent Duparchy >> ESRF - The European Synchrotron >> MIS Unit >> 04 76 88 22 56* >> Sven Meier wrote on 03/11/2022 09:38: >> >> That HTML doesn't look valid to me: >> >> Your THs belong inside a TR, and while you're at it move that one into >> >> a THEAD. >> >> https://www.w3schools.com/tags/tag_th.asp >> >> Maybe this is just a problem with replacing the HTML in the browser, >> >> this is why I adviced you to check the response of the Ajax request in the >> Browser network tab. >> >> Sven >> >> >> On 03.11.22 08:11, Laurent Duparchy wrote: >> >> You need more than that ? >> >> >> <div id="wakeUpForm"> >> <form wicket:id = "wakeUpForm"> >> <div wicket:id="devicesGroup"> >> >> <table class="wakeUptable" > >> <th><wicket:message key="selectMessage"/></th> >> <th><wicket:message key="hostNameMessage"/></th> >> <th><wicket:message key="macMessage"/></th> >> <th><wicket:message key="reachable"/></th> >> <th><wicket:message key="removeMessage"/></th> >> <tbody> >> <tr wicket:id="userDevicesListView"> >> ... >> </div> >> >> *Laurent Duparchy >> ESRF - The European Synchrotron >> MIS Unit >> 04 76 88 22 56* >> Sven Meier wrote on 02/11/2022 17:38: >> >> Show us the relevant markup please. >> >> Sven >> >> >> On 02.11.22 15:13, Laurent Duparchy wrote: >> >> Hi, >> >> Yes, *devicesGroup *is initially visible. Everything seems fine in >> >> terms of Ajax request/response. >> >> When I add only the *feedbackpanel*, it is correctly added and >> >> painted with the correct feedback message >> >> When I add *devicesGroup*, nothing is repainted, including the >> >> *feedbackpanel*. >> >> I tried to add only the *userDevicesListView *for repaint, but there >> >> is an error saying that it's not possible to add a repeater and to add its >> parent... which is devicesGroup. >> >> There's probably a flaw in the devicesGroup design. Basically it >> >> contains a list of items w/ two possible ajax action : "check" and "delete". >> >> "Check" will only gives a result in the feedback panel and is >> >> working fine. >> >> "Delete" will, you guessed, delete the item and repaint the list. >> >> The item is truly deleted, in the database and /userDevices /list is >> reloaded. >> >> it is designed as follow (worked fined w/ Wicket 1.4) >> / >> private class UserDevicesLoadableDetachableModel extends >> >> LoadableDetachableModel { >> >> private List userDevices ; >> ... >> } >> >> private class UserDevicesListView extends ListView { >> >> public UserDevicesListView(String id, >> >> UserDevicesLoadableDetachableModel imodel) { >> >> super(id, imodel); >> } >> ... >> } >> / >> >> /userDevicesListView = new >> >> UserDevicesListView("userDevicesListView", >> userDevicesLoadableDetachableModel);// >> >> / >> /devicesGroup = new CheckGroup<Device>("devicesGroup", new >> >> ArrayList<>()){// >> >> // public boolean isVisible() {...}// >> //} / >> /devicesGroup.setOutputMarkupId(true);// >> //devicesGroup.setOutputMarkupPlaceholderTag(true);// >> //devicesGroup.setRenderBodyOnly(false);// >> //devicesGroup.add(new CheckGroupSelector("devicesGroupSelector"));// >> //devicesGroup.add(userDevicesListView);// >> // >> >> // >> / >> *Laurent Duparchy >> ESRF - The European Synchrotron >> MIS Unit >> 04 76 88 22 56* >> Ernesto Reinaldo Barreiro wrote on 29/10/2022 04:06: >> >> Hi, >> >> is devicesGroup initially visible? if not you need to >> setOutputMarkupplaceHolder(true) in it. Because otherwise wicket >> >> will not >> >> output anything for it and AJAX replacement will fail at client >> >> side. >> >> On Fri, Oct 28, 2022 at 4:27 PM Martin Grigorov< >> >> mgrigo...@apache.org> >> >> wrote: >> >> >> Hi Laurent, >> >> Few questions: >> 1) is the Ajax call actually executed ? >> Set a breakpoint inside #onClick() and see whether it breaks >> 2) Is there any error (Java or JavaScript) ? >> Check both the server logs and the browser console >> >> >> On Fri, Oct 28, 2022 at 10:45 AM Laurent Duparchy<dupar...@esrf.fr >> >> wrote: >> >> >> Hi, >> >> Sorry for the basic question.... If this is the wrong place to >> >> ask, >> >> please >> >> tell me. >> If there is a relevant documentation to read, tell me as well. >> >> I'm upgrading a very old & small app from Wicket 1.4 to Wicket 9. >> >> Following an Ajax call, one component is not refreshed as it was >> >> before. >> >> This is the "userDevicesListView" which is inside the >> >> "devicesGroup" >> >> component. See below. >> >> >> <div id="wakeUpForm"> >> <form wicket:id = "wakeUpForm"> >> <div wicket:id="devicesGroup"> >> >> <table class="wakeUptable" > >> <th><wicket:message key="selectMessage"/></th> >> <th><wicket:message key="hostNameMessage"/></th> >> <th><wicket:message key="macMessage"/></th> >> <th><wicket:message key="reachable"/></th> >> <th><wicket:message key="removeMessage"/></th> >> <tbody> >> <tr wicket:id="userDevicesListView"> >> ... >> </div> >> >> Upon the Ajax call the userDevicesListView is changed and >> >> devicesGroup is >> >> added to the target and should be rendered / repainted but it is >> >> not. >> >> public void onClick(Optional<AjaxRequestTarget> target) { >> Device deviceToRemove = (Device) getModelObject(); >> try { >> removeDevice(deviceToRemove, user); >> info(deviceToRemove.getHostName() + " " + >> >> getString("device.removed")); >> >> } catch (Exception e) { >> >> LOG.error("error while deleting" + >> >> deviceToRemove.getHostName(), e); >> >> error(e); >> >> } >> >> target.get().add(devicesGroup); >> target.get().add(feedbackPanel); >> } >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail:users-unsubscr...@wicket.apache.org >> For additional commands, e-mail:users-h...@wicket.apache.org >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> >> -- Best regards, Maxim