Thanks. Yes, your code is similar to what I am doing.
But trying to sych the Ajax dropdown state with the page parameters is
defeating me. There are effectively two ways of getting to the results page
- search form post and directly from a bookmarked URL.
I'm using a CompoundPropertyModel containing my own SearchModel class -
holds the values selected in the dropdowns - not the actual dropdown
objects, eg:
public class SearchModel implements Serializable {
private String area;
private String country;
private String region;
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
// more getters and setters
}
Then in the panel class, I have something like:
final CompoundPropertyModel searchPropertyModel = ((WholSession)
Session.get()).getSearchModel();
setModel(searchPropertyModel);
DropDownChoice areaDDC = getAreaDDC(searchPropertyModel);
private DropDownChoice getAreaDDC(final CompoundPropertyModel model) {
PropertyModel areaModel = new PropertyModel(model, AREA);
LoadableDetachableModel areaLDModel = new
LoadableDetachableModel() {
public Object load() {
return ((WholApplication)
getApplication()).getAreas();
}
};
DropDownChoice areaDDC = new DropDownChoice(AREA, areaModel,
areaLDModel)
{
protected CharSequence getDefaultChoice(Object
selected) {
return ALL_AREAS;
}
};
areaDDC.add(new AjaxFormComponentUpdatingBehavior(ONCHANGE) {
protected void onUpdate(AjaxRequestTarget target) {
countryDDC.clearInput();
countryDDC.setModelObject(null);
regionDDC.clearInput();
regionDDC.setModelObject(null);
target.addComponent(countryDDC);
target.addComponent(regionDDC);
}
});
areaDDC.setNullValid(false);
areaDDC.setOutputMarkupId(true);
return areaDDC;
}
SearchModel is set in the session in my panel constructor like:
final CompoundPropertyModel searchPropertyModel = ((WholSession)
Session.get()).getSearchModel();
setModel(searchPropertyModel);
and again in the form's onSubmit()
This mostly works (I still get some unpredictable state with some
combinations of dropdown changes and backbutton clicks when I don't submit
the form). I have set no-cache headers on the pages with the search panel
to make it reload from the server instead of browser cache. I can just
about live with this, but it's clunky.
Essentially, the model I'm using to keep state for the related Ajax
dropdowns gets automatically updated by Wicket. It seems like a backwards
step to somehow manually try to update this from the page query params (not
even sure this is possible). I still can't work out how to do this - but
suspect it's a bad idea.
No doubt my code can be improved (I'm still trying to get my head around
Wicket - I'm struggling because I have no Swing background, and still try to
do everything like Struts / Servlet / JSP).
I've spent far too long on this already - good for learning, but frustrating
because I'm failing. Not blaming Wicket - this particular problem was
beyond me using Struts with DWR for the AJAX bits, so I ended up not using
AJAX and just refreshing the whole page on dropdown onchange events and
building the search box contents and selectins on the server. I suspect I
may have to go the same way if I want to use Wicket - or drop my requirement
for AJAX with synchonised search box widgets, search params and search
results.
I can feel a user interface redesign coming soon.
I seem to spend most of my time trying to work around Wicket rather than
with it - my problem, I know. But mostly it has been easy to bolt Wicket
onto my backend application in place of the existing Struts / JSP front end
- many things are much easier to code in Java than in JSP taglibs.
lars vonk wrote:
>
> We are building a somewhat similar application. The only difference is
> that we don't need to synch the search criteria with the search panel
> (the Ajax dropdowns in your case), since the search panel in our
> application will do a clean search when used from the results page.
>
> The code looks something like this, which I don't think is too messy:
>
> ResultPage extends WebPage {
> private SearchCriteria criteria
>
> // via bookmarked page
> ResultPage(PageParameters params) {
> searchCriteria = new SearchCriteria();
> setPageParametersOnSearchCriteria(searchCriteria);
> showResults(searchCriteria);
> }
>
> ResultPage(SearchCriteria criteria) {
>
> showResults(searchCriteria);
> }
> }
>
> Hopes this helps.
>
> Lars
>
> On Tue, Mar 4, 2008 at 2:42 PM, steviezz <[EMAIL PROTECTED]> wrote:
>>
>> I am using Ajax to populate 3 related DropDownChoice widgets in a search
>> form
>> (area, country, region) - see my
>>
>> http://www.nabble.com/Combining-Ajax-and-non-Ajax-pages-tt15587166.html#a15587166
>> previous thread for more info.
>>
>> I am trying to maintain the search criteria in a model stored in the
>> session
>> so that the selected form state (used inside a panel on the site home
>> page
>> and reused in the search results page) reflects the displayed search
>> results
>> and survives navigation to and from the home page, page refreshes, back
>> button clicks, etc. I more or less have this working.
>>
>> But I now want the results page to be bookmarkable (including query
>> params).
>>
>> I'm currently trying to use my model object stored in the session just
>> to
>> maintain the state for the dropdowns, then submit the form to a mounted
>> bookmarkable page to show the results.
>>
>> I can then take the page params and pass to my backend to do the actual
>> search before displaying the results.
>>
>> Only problem I have now is that if someone comes in via a bookmarked
>> page
>> link, then the dropdown state will likely not be correctly initialised -
>> either no model in session (default search form widgets - I can live
>> with
>> this) or a previous session model reflecting a different set of criteria
>> than the query params and displayed results (I can't live with this).
>>
>> The rationale behind doing this whole thing is that I want my search
>> results
>> to be capable of being spidered from bookmarkable search results pages
>> (so
>> needs URL params rather than form post). But I do care about human
>> users
>> seeing incorrect state between the search form selections and the
>> displayed
>> results.
>>
>> So now I have to worry about resetting the session model when a
>> bookmarked
>> page is requested then updating the Ajax dropdowns. It's getting very
>> messy
>> and I feel I'm digging myself into a hole.
>>
>> So, is there an easy way to do this, or do I stop digging?
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Use-Ajax-for-loading-form-dropdowns%2C-but-query-params-for-search--tp15827399p15827399.html
>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
--
View this message in context:
http://www.nabble.com/Use-Ajax-for-loading-form-dropdowns%2C-but-query-params-for-search--tp15827399p15862531.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]