なんかしっくりこないねえ。

class IndexPage implements WebPage {
    @Override
    public String getPath() {
        return "/index.html"
    }
    
    @Override
    public WebContents getContents(WebContext context) {
        XHtmlContents xhtml = XHtmlTemplate.fromResource(context, "index.xhtml");
        xhtml.setWebPage(this);
        xhtml.setFormAction("login", context.getPage(HelloPage.class));
        return xhtml;
    }
}

class HelloPage implements WebPage {
    @Override
    public String getPath() {
        return "/hello.html"
    }
    
    @Override
    public WebContents getContents(WebContext context) {
        String userName = context.get("username");
        if (userName == null) {
            return context.redirect(IndexPage.class);
        } else {
            XHtmlContents xhtml = XHtmlTemplate.fromResource(context, "hello.xhtml");
            xhtml.setWebPage(this);
            xhtml.setInnerText("username", userName);
            return xhtml;
        }
    }
}

遷移元と遷移先のどっちで引数を取得するかまだ迷ってるみたい。