2009-07-30

Table height = Browser window height WITHOUT quirks mode!

In spite of all the CSS hype, I still occasionally like to use tables to lay out a page. I think there are some layout situations where a table lets you do things CSS layouts don't.

For a long time, I've been despairing about the apparent impossibility of getting a page to fill the browser screen, or a known proportion of it, independently of the user's browser window size and without using JavaScript.

It used to be that a table at 100% height would fill the screen vertically. However, this was a "feature" of the so-called "quirks mode." If you build a Web page with a "proper" DOCTYPE, you hint to the browser that you know how to build standards compliant Web pages, and in return it renders your page more or less rigidly according to the standard.

This is very thoroughly explained by Gary White on the AppTools site .

The good news is, there's a standard compliant workaround. You can use CSS to set the height of the <html> and <body> elements of the page to 100%; their parent is the screen, so they will. Then you can use CSS to set the height of your table to 100%, and it will fill your screen.

2009-07-22

import static in a JSP

I have yet to try this, but according to this post on the GlassFish forum, the way to do an "import static" in a JSP is like this:

<%@ page import="static foo.*" %>

Implementing an interface in a JSP

I've scoured the net, but apparently it's not possible to make a Java Server Page implement an interface. Not directly, anyway.

What is possible is to extend a class. The directive is:

<%@ page extends="package.class"%>


One reference for JSP page directives is: http://java.sun.com/products/jsp/tags/11/syntaxref11.fm7.html .

The class generated from a JSP usually extends HttpServlet. If you really want to have your JSP implement an interface, you could do something like

public abstract class
my.package.MyJSP extends HttpServlet implements MyInterface {

}

... and then use "my.package.MyJSP" in a "page extends" directive as shown above.

The caveat to this is that some Web containers will generate their own subclasses of HttpServlet, presumably for some kine of optimization, and using the "page extends" directive will sabotage this scheme. It should still work, it just won't include the fancy footwork your Web container intended to do.