欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java,

来源: javaer 分享于  点击 13295 次 点评:172

java,


问题描述:表单元素使用struts2.x标签后,提交表单时因错误返回当前表单,struts2.x会自动显示错误。只是这种错误的显示的格式是<ul><li></li></ul>,很不符合我们的习惯。
预期目标:我们希望错误紧跟在表单元素之后。

简要分析:
1.首先打开struts2-core-2.1.8.1.jar/template.xhtml/template.xhtml
通过分析发现,这个freemarker文件是由以下几个文件组成。
<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
<#include "/${parameters.templateDir}/simple/text.ftl" />
<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
2.依次打开这3个文件进行分析。
其中controlheader.ftl中又包含
<#include "/${parameters.templateDir}/xhtml/controlheader-core.ftl" />
这个文件里就记录着表单页面要显示的错误格式。

几个文件的组合样式大概就这个样子:
<table>
<tr>
<td colspan="2">错误信息</td>
</tr>
<tr>
<td>标签</td>
<td>表单元素</td>
</tr>
<table>
table里内容其实是个for循环,这个为了方便看,只写一次。
现在我们想要的是把错误的行给去掉,把td放到下一行中,去掉colspan属性即可。

修改后大概是这个样子:
<table>
<tr>
<td>标签</td>
<td>表单元素</td>
<td>错误信息</td>
</tr>
<table>
这样就能把错误自动显示到表单元素的后边去了。

动手实践:
1.通过分析,我需要修改的两个文件是:controlheader-core.ftl和controlfooter.ftl
2.用压缩软件打开struts2-core-2.1.8.1.jar,然后把这个两个文件拷贝出来修改。
3.修改controlfooter.ftl
把controlheader-core.ftl文件中以下代码复制到
controlfooter.ftl中 </td><#lt/>之后,然后把复制过来的这段<tr errorFor="${parameters.id}">和</tr>和td中的colspan="2"都删掉。
从controlheader-core.ftl复制以下代码:
<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/>
<#if hasFieldErrors>
<#list fieldErrors[parameters.name] as error>
<tr errorFor="${parameters.id}">
<#if parameters.labelposition?default("") == 'top'>
<td align="left" valign="top" colspan="2"><#rt/>
<#else>
<td align="center" valign="top" colspan="2"><#rt/>
</#if>
<span class="errorMessage">${error?html}</span><#t/>
</td><#lt/>
</tr>
</#list>
</#if>
4.修改controlheader-core.ftl
删除controlheader-core.ftl文件中从
<#if hasFieldErrors>
<#list fieldErrors[parameters.name] as error>
<tr errorFor="${parameters.id}">
<#if parameters.labelposition?default("") == 'top'>
<td align="left" valign="top" colspan="2"><#rt/>
<#else>
<td align="center" valign="top" colspan="2"><#rt/>
</#if>
<span class="errorMessage">${error?html}</span><#t/>
</td><#lt/>
</tr>
</#list>
</#if>到这里。
记住:不要删掉<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/>,因为文件下边有用到。
5.在你的项目的classpath(也就是src)下创建template/xhtml文件夹,把修改后的两个文件拖进去即可。
6.启动项目进行测试:
7.代码片段:
<s:head theme="xhtml"/> //显示颜色样式

<s:form action="user_regUser">
<s:textfield name="user.name" label="名称" />
<s:password name="user.password" label="密码 " />
<s:password name="password2" label="确认密码" />
<s:submit />
</s:form>
8:显示效果:双击看全图

相关文章

    暂无相关文章
相关栏目:

用户点评