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 <
avinashredd...@gmail.com> 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 <mich...@mosmann.de>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: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>>
>

Reply via email to