I'd say the CGI plugin is better than something like this too: <html:text property="user"/> b/c the attributes match up better; property? "What HTML attribute is that?" one might ask. Here's the CGI TT2 for it.
[% USE CGI # goes anywhere %]
[% CGI.textfield( name => 'user' ) %]
Another advantage being you can embed all the attr you want.
[% CGI.textfield( name => 'user',
onmouseover => 'this.focus()',
style => 'width:12em;',
default => user_obj.user || CGI.param('user') )
%]
Also, check out how to do WRAPPERs, INCLUDEs, and define your own FILTERs. TT2 is *extremely* powerful for what it will let you do in those regards. In fact this got me a bit excited to spark up more sharing of this stuff. I'll try to post a handful of the TT2 snippets/wrappers I use in a day or two.