第一个问题出现了,如下图:
说明 :
很多人都是对此很烦恼, struts2 使用的默认主题是 xhtml ,查看 html 页面的源码发现,它给我们生成了表格布局,所以界面比较整齐,但在提供便利的同时,也带来些烦恼,就是错误提示出现的位置。
解决方案 :
1 )把主题设为 theme=simple ,自己去控制布局,
2 ) struts 使用 freemarker 模版技术,为我们标签生成了 html 代码,所以我们通过修改模版设置错误信息提示的位置。
解读源码了:
果然是继承了 Component ,学框架思想最重要的是看别人的注释,因为注释是别人思想的表达,这个类负责通过模版构建 html 文本,所以我们最重要的是找到模版的位置,这个我也是大概看懂,毕竟还没达到水平,相信您已经达到 ,大致意思是找这些属性值,从而定位到 ftl 模版文件
struts.ui.theme=xhtml
struts.ui.templateDir=template
struts.ui.templateSuffix=ftl
如 :<s:checkbox/> 找 /template/xhtml/checkbox.ftl 模版文件,类推 <s:textfield/>, 在 strus2-core.jar 下找 textfield.ftl ,发现是 text.ftl, 打开我们查看:
包含三个模版, controlheader.ftl 又包含 controlheader-core.ftl 文件,该文件才是核心,
现在我们要修改 controlheader-core.ftl 、 controlfooter.ftl 文件,把错误信息放到 controlfooter.ftl 里面,我们可以有两种方式修改:
1) 拷贝出两个文件,修改后再压缩进去(严重不建议!)
2) 既然有这样的需求, strus2 团队肯定考虑到了,这让我实在太佩服他们了,每个细节考虑的都是那么周到,看官方文档
本章里 strus2 团队还给我们提供很多建议,建议我们不要随便更换模版引擎,如要修改 ftl 文件最好把源文件拷贝出来加以修改,不要自己手工重写,以防止出错。
相信也不用解释了,格式为: /template/$theme/$template.ftl .
所以我们只要在 Web-Root 下创建 /template/xhtml 文件夹,拷贝 controlheader-core.ftl 、 controlfooter.ftl 文件再加以修改。
本人对于 freemarker 语言不是很了解,但掌握了思想,这种增增删删的操作还是可以应付的,经过几轮修改,总于搞定了。
发现它没有 doStartTag() 方法,所以猜肯定在父类里定义了,查看 AbstractUITag ,这个类里也没有 doStartTag() 方法,这个类是所有 UI 标签的父类,里面定义了标签的属性