When I'm generating an HTML table, I like to make it very obvious what goes in each row, that every row I start, I end, and, basically, that every start tag has a matching end tag at the appropriate place. Aside from making it easier to validate by inspection, it makes it easier to change things later. Building it up in a new StringBuffer makes that easy and appending to a StringBuffer is reasonably efficient, since it just adds to the end of pre-allocated space and grows it as needed, as opposed to repeatedly inserting into the middle of an existing StringBuffer, which has to shift around the current content to make room for the new content after every insert().
Regarding the pseudo-CAB not appearing in other locations, you should look at RequestEditorKit.java and see where it calls StationaryButtonDecorator.decorate. It's called if you are in adventure.php (which you stay in if it does not redirect to choice.php or fight.php - i.e., for a straight Noncombat), for choice.php, and for fight.php. The Daily Dungeon is dungeon.php. Dvorak's revenge is tiles.php. Both of those call their own custom decorators, but it's perfectly fine to call multiple decorators, as you will see when you look at RequestEditorKit ...
If you want a CAB for Dvorak's revenge, I suggest you look at DvorakDecorator.decorate to see what it generates for the Solve! button. Did you notice that StationaryButtonDecorator.decorate is given the location? You can generate custom buttons for tiles.php, choice.php, or whatever, if you want. Now, if you wanted custom per-choice buttons, you would need to look into the buffer itself to see whichchoice=xxx.
Edit: I just uploaded a new version of my patch which tweaks a few things in the interest of code clarity.
Edit 2: if you make tiles.php and dungeon.php call the StationaryButtonDecorator, don't forget that people will see it even if they don't use the CAB and thus your code. Unless you want to generate KoLmafia-style stationary buttons for such people, you should make the function bail out (or is that Bale out?

) for those locations.