使用ww2的validator,taglib就只能使用xhtml了。taglib我一向讨厌,再加上ww2 xhtml这套做得非常难看,自做主张的加一堆table、td之类的html标签进去。
看了一下xhtml的velocity模板,如果检验未通过,ww2将validators.xml中相应field检验失败的message是放进fieldErrors里面的。
checkbox.vm
#if( $fieldErrors.get($parameters.name) )
#set ($hasFieldErrors = $fieldErrors.get($parameters.name))
#foreach ($error in $fieldErrors.get($parameters.name))
<tr>
<td align="left"
valign="top" colspan="2"><span
class="errorMessage">$!error</span></td>
</tr>
#end
#end
<tr>
<td valign="top" colspan="2">
#* Use an extra table so that the checkbox doesn't align with the other columns. *#
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign="middle">#parse("/template/simple/checkbox.vm")</td>
<td width="100%"
valign="middle"><label #if ($parameters.id)
for="$!webwork.htmlEncode($parameters.id)"#end#if ($hasFieldErrors)
class="checkboxErrorLabel"#else
class="checkboxLabel"#end>$!webwork.htmlEncode($parameters.label)</label></td>
</tr>
</table>
#parse("/template/xhtml/controlfooter.vm")
我使用的模板引擎是freemarker,参照xhtml的vm代码,自己写了个marco。
<#macro validError local>
<#if req.method=='POST'>
<#if
fieldErrors?has_content &&
fieldErrors[local]?exists
>
<br>
<font color="red">
<#list fieldErrors[local] as error>
${error}
</#list>
</font>
</#if>
</#if>
</#macro>
模板示例:
<tr>
<td width="80" align="right">登录密码:</td>
<td>
<input type="password" name="model.password"
value="${model.password?if_exists}" size="24">
<@validError local="model.password"/>
</td>
</tr>