Using frames can cause problems with 'expired' pages. Wicket holds a list (or actually a map) of page instances in your session (how many depends on your configuration, ApplicationSettings.maxPages), but defaults to 10 - which is problably higher than you need. Anyway, in some cases, like when working with frames, you want to have seperate lists. This is supported by Wicket by using the 'pagemap' parameter. If this parameter is not used, it will use it's default pagemap (that's probably what you want to use for your 'main' frame).

Here's an example of how you can set up your frames:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
  <HEAD>
    <TITLE>A simple frameset document</TITLE>
  </HEAD>
  <FRAMESET cols="20%, 80%">
    <FRAMESET rows="100, 200">
      <FRAME src="myapp?wicket:bookmarkablePage=leftframe:mypackage.MyNavigationPage">
      <FRAME src="myapp?wicket:bookmarkablePage=mypackage.MyMainPage">
    </FRAMESET>
    <FRAME src="myapp?wicket:bookmarkablePage=bottomframe:mypackage.MyStatusBarPage">
  </FRAMESET>
</HTML>

That's it. Page maps are created automatically, and all links etc of a page that was created for a certain page map will keep on refering that page map.

Note that if you make heavy use of popup windows, this strategy could be useful as well.

2 Comments

  1. This didn't work with 1.2.4.
    All the "bookmarkablePage"s must be replaced with wicket:bookmarkablePage for 1.2+.

    I'd like to see examples showing a tree navigation in one frame, and contents of the node shown in another frame.

    1. In 1.2, the right hand side of bookmarkablePage= must start with a colon ':', or a page map name and a colon.