您的位置:首页 > 编程语言 > Java开发

自定义模板,改变struts2中校验信息的显示格式

2009-12-11 21:45 417 查看
在学习struts2的过程中我们会发现struts2定义好的校验信息的显示格式是错误输出是在输入框的上方,但希望错误信息是显示在输入框的右方,该如何做呢?

打开 struts2-core-2.x.x.jar 可以看到里面有一个 template,在 template 下有5个目录 ajax、css_xhtml、**、xhtml 和 archive,其中前四个分别是 ajax、css_xhtml、**、xhtml 主题的目录,每个主题目录中有各自的模板文件,主要是 ftl 文件,还有 css 和 js 文件。最后一个 archive 是归档的主题目录,其下又有 ajax、**、xhtml、模板文件是 .vm 文件。我们知道 Struts2 大力推荐的模板语言是 FreeMarker,而不是 Velocity。
输入框 <s:textfield .../> 默认是用的 xhtml/text.flt 模板,其内容如下:
<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
<#include "/${parameters.templateDir}/**/text.ftl" />
<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
text.ftl 包装了 controlheader.ftl/smple/text.ftl/controlfooter.ftl,那我们就要打开这三个模板看个究竟了。我们会发现controlheader.ftl中又包装了controlheader-core.ftl ,错误信息可以追溯发现是在 controlheader-core.ftl 中定义显示的,controlfooter.ftl的代码为
${parameters.after?if_exists}<#t/>
</td><#lt/>
</tr>
作用是结束一个<td>和<tr> ,${parameters.after?if_exists}是和输入框的显示有关系的。
上面三个模板形成的格式为:
错误信息
label:输入框
代码为:
<tr errorFor="regist1_repassword">
<td align="left" valign="top"><span class="errorMessage">重复密码不能为空</span></td>
</tr>
<tr>
<td class="tdLabel"><label for="regist1_repassword" class="errorLabel">repassword:</label></td>
<td><input type="password" name="repassword" id="regist1_repassword"/></td>
</tr>
我们要做的就是要在输入框后面显示错误信息,也就是在输入框后面加一列显示错误信息,所以可以把xthml/text.ftl 和 controlheader-core.ftl、 controlfooter.ftl拷到 WEB-INF/classes/template/xhtml 目录中进行修改,WEB-INF/classes/template/xhtml 中的模板文件是优先于 struts2-core-2.x.x.jar 里的 template/xhtml 目录中的模板文件加载。
修改如下:
将 controlheader-core.ftl中如下代码(红色部分)拷贝到controlfooter.ftl中,然后将其注释掉(蓝色<#-- -->范围)
<#--
Only show message if errors are available.
This will be done if ActionSupport is used.
-->
<#assign hasFieldErrors = parameters.name?exists && fieldErrors?exists && fieldErrors[parameters.name]?exists/>
<#--
<#if hasFieldErrors>
<#list fieldErrors[parameters.name] as error>
<tr errorFor="${parameters.id}">
<#if parameters.labelposition?default("") == 'top'>
<td align="left" valign="top" colspan="3"><#rt/>
<#else>
<td align="center" valign="top" colspan="3"><#rt/>
</#if>
<span class="errorMessage">${error?html}</span><#t/>
</td><#lt/>
</tr>
</#list>
</#if>
-->

上述代码考到controlfooter.ftl后放置的位置为:
<#assign hasFieldErrors = parameters.name?exists && fieldErrors?exists && fieldErrors[parameters.name]?exists/>
${parameters.after?if_exists}<#t/>
</td><#lt/>
<#if hasFieldErrors>
<#list fieldErrors[parameters.name] as error>
<#--<tr errorFor="${parameters.id}">-->
<#if parameters.labelposition?default("") == 'top'>
<td align="left" valign="top"><#rt/>
<#else>
<td align="center" valign="top" colspan="3"><#rt/>
</#if>
<span class="errorMessage">${error?html}</span><#t/>
</td><#lt/>
<#--</tr>-->
</#list>
</#if>
</tr>
然后将红色<#-- -->包含的部分注释掉。
经过以上的设置之后,就达到了我们想要的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: