Solved the problem.
We need to extend WebRequestCycleProcessor and return that from our
Application class. We also need to extend WebRequestCodingStrategy and
return that from our WebRequestCycleProcessor . Following is the code.
public class MyWicketApp extends WebApplication{
....................
protected IRequestCycleProcessor newRequestCycleProcessor(){
return new MyWebRequestCycleProcessor();
}
}
public class MyWebRequestCycleProcessor extends WebRequestCycleProcessor{
protected IRequestCodingStrategy newRequestCodingStrategy(){
return new MyWebRequestCodingStrategy("/app");
}
}
The real stuff is in the following class.
public class MyWebRequestCodingStrategy extends WebRequestCodingStrategy{
// The path to appent to the contextPath to get the filter path.
private String wicketFilterPath;
public MyWebRequestCodingStrategy(String wicketFilterPath){
this.wicketFilterPath = wicketFilterPath;
}
protected CharSequence encode(RequestCycle requestCycle,
IListenerInterfaceRequestTarget requestTarget){
// We know that WebRequestCodingStrategy#encode(RequestCycle,
IListenerInterfaceRequestTarget) returns a AppendingStringBuffer.
AppendingStringBuffer url =
(AppendingStringBuffer)super.encode(requestCycle, requestTarget);
if(isRequestFromDIV((WebRequest)requestCycle.getRequest())){
if(url.indexOf("?") > -1){
url.append("&");
}
url.append("pageLoadedInDiv=true");
* String urlPrefix = getRequestURI((WebRequest)requestCycle.getRequest());
//TODO: optimize. Work with AppendingStringBuffer.value().
url = new AppendingStringBuffer(urlPrefix + url);*
}
return url;
}
protected CharSequence encode(RequestCycle requestCycle,
ISharedResourceRequestTarget requestTarget){
AppendingStringBuffer url =
(AppendingStringBuffer)super.encode(requestCycle, requestTarget);
// Make an absolut reference to the resource. Reletive will not work.
String urlPrefix =
getContextPath((WebRequest)requestCycle.getRequest())+wicketFilterPath+'/';
//TODO: optimize.
url = new AppendingStringBuffer(urlPrefix+url);
return url;
}
private String getContextPath(WebRequest request) {
return request.getHttpServletRequest().getContextPath();
}
private String getRequestURI(WebRequest request) {
return request.getHttpServletRequest().getRequestURI();
}
private boolean isRequestFromDIV(WebRequest request) {
// To identify our special request. We dont need this if we choose to make
every path absolute.
return "true".equals(request.getParameter("pageLoadedInDiv"));
}
}
The html file.
<html xmlns="http://www.w3.org/1999/xhtml">
<head xmlns:wicket="http://wicket.apache.org">
<script src="prototype-1.6.0.3.js"></script>
<script type="text/javascript"
src="app/resources/org.apache.wicket.markup.html.WicketEventReference/wicket-event.js"></script>
<script type="text/javascript"
src="app/resources/org.apache.wicket.ajax.WicketAjaxReference/wicket-ajax.js"></script>
<script type="text/javascript"
src="app/resources/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/wicket-ajax-debug.js"></script>
<script type="text/javascript"
id="wicket-ajax-debug-enable"><!--/*--><![CDATA[/*><!--*/
wicketAjaxDebugEnable=true;
/*-->]^]^>*/</script>
<script>
function loadWicketContainer(){
*new Ajax.Updater('wicketContainer',
'/wsb/app/page_1.jas?pageLoadedInDiv=true', { method: 'get' }); *
}
</script>
</head>
<body onload="loadWicketContainer()">
<div id=wicketContainer>
</div>
</body>
</html>
Thanks
Avinash P
On Wed, Aug 26, 2009 at 7:09 AM, Avinash palicharla <
[email protected]> wrote:
> Thank you :)
>
> Yes, the page comes from the same server.
>
> I got the Head to work by including the following.
>
> =============================================================================================
> <script type="text/javascript"
> src="app/resources/org.apache.wicket.markup.html.WicketEventReference/wicket-event.js"></script>
>
> <script type="text/javascript"
> src="app/resources/org.apache.wicket.ajax.WicketAjaxReference/wicket-ajax.js"></script>
>
> <script type="text/javascript"
> src="app/resources/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/wicket-ajax-debug.js"></script>
>
> <script type="text/javascript"
> id="wicket-ajax-debug-enable"><!--/*--><![CDATA[/*><!--*/
> wicketAjaxDebugEnable=true;
> /*-->]^]^>*/</script>
> <script>
>
> ===============================================================================================
>
> Now wicket Ajax work but we have a problem. All the wicket Ajax urls have
> only a query string and so the request goes to Spring MVC controller and not
> Wicket.
>
> To simplify the problem I removed Spring MVC out of context, ie created a
> new web app with one html page(with a DIV) and one Wicket Page and used Ajax
> to load the Wicket page into the DIV(of the HTML page). A smaller app will
> also save me a lot of time during build-deploy.
>
> Now I believe I need to do the following to get wicket Ajax to work
> 1. Somehow prepend the wicket url to the query string passed to Ajax.
> eg:-
> onclick="var wcall=wicketAjaxGet('*
> ?wicket:interface=:2:radioForm:xxxxxx:radioGroup:r1::IBehaviorListener:0:*',null,null,
> function() {return Wicket.$('r1a') != null;}.bind(this));"
>
> should become
>
> onclick="var wcall=wicketAjaxGet(*'/myapp/wicket/myPage.html
> ?wicket:interface=:2:radioForm:xxxxxx:radioGroup:r1::IBehaviorListener:0:*',null,null,
> function() {return Wicket.$('r1a') != null;}.bind(this));"
>
> I have no idea of how to change the URL. I will dig deeper and find out if
> i can do that. Any advice in the mean time will be of great help.
>
> Thanks,
> Avinash P
>
>
>
>
>
>
>
>
> On Wed, Aug 26, 2009 at 4:35 AM, Michael Mosmann <[email protected]>wrote:
>
>> Am Mittwoch, den 26.08.2009, 01:29 -0500 schrieb Avinash palicharla:
>> > I have a page built in SpringMVC. I have a iFrame in this page that
>> loads a
>> > Wicket Page. I want to replace the iFrame with a DIV and load the Wicket
>> > page inside the DIV using Ajax.
>>
>> good luck with this one..
>> does this page come from the same server?
>>
>> > I used Prototype to load the wicket page. The page loads but the wicket
>> > javascript does not work anymore. I guess this is because the <head> tag
>> > from the wicket response is not processed.
>>
>> yes...
>> 1) you can process the <head>
>> 2) you can fake it, if you include wicket-*.js in your page
>>
>> mm:)
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>