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

在学习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。
     输入框  默认是用的 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/>
    <#lt/>
作用是结束一个和 , ${parameters.after?if_exists} 是和输入框的显示有关系的
上面三个模板形成的格式为:
错误信息
label:输入框
代码为:
重复密码不能为空
    我们要做的就是要在输入框后面显示错误信息,也就是在输入框后面加一列显示错误信息,所以可以把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>

<#if parameters.labelposition?default("") == 'top'>
    <#rt/>
<#else>
    <#rt/>

        ${error?html}<#t/>
    <#lt/>



-->
 
上述代码考到controlfooter.ftl后放置的位置为:
<#assign hasFieldErrors = parameters.name?exists && fieldErrors?exists && fieldErrors[parameters.name]?exists/>
${parameters.after?if_exists}<#t/>
    <#lt/>
<#if hasFieldErrors>
<#list fieldErrors[parameters.name] as error>
<#---->
<#if parameters.labelposition?default("") == 'top'>
    <#rt/>
<#else>
    <#rt/>

        ${error?html}<#t/>
    <#lt/>
<#---->


然后将红色<#--  -->包含的部分注释掉。
   经过以上的设置之后,就达到了我们想要的效果。

你可能感兴趣的:(自定义模板,改变struts2中校验信息的显示格式)