一、关于页面跳转的疑问
- 后台「return "/pool/index"」返回的是字符串,会自动寻找名为“index”的页面模板文件是怎样实现的?
答:这是SpringMVC实现的,如果在Action层方法名顶部,不能添加注释“@ResponseBody”否则后台会以数据形式返回到前台。
如果action层中的方法,需要返回页面,却添加了“@ResponseBody”注解,就会出现下面问题:
- 如果想要返回以“.shtml”后缀的模板文件,需要怎样设置?
答:修改application.yml配置文件如下: #################模板参数配置#################thymeleaf:mode: HTML5 prefix: classpath:/templates/ suffix: .shtml servlet: content-type: text/html mvc: static-path-pattern: /** resources: static-locations: classpath:/webapp/, classpath:/META-(换行)INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
- 注意,不建议在action层,RequestMapping中配置以“.html”结束的请求名。
原因:会与页面文件重复,分不清是文件名还是请求。也不利于后续代码维护。
- 关于action层返回值是「页面模板文件名」或「redirect:/请求名」
以下面代码为例:
@RequestMapping("/receive-success.shtml")
public String reciveSuccess(HttpServletRequest request,Model model) {
String mobile = (String) request.getSession().getAttribute("mobile");
if(mobile == null) {
return "redirect:/index.shtml"; ----------1
}
return "receiveSuccess"; --------------------2
}
1:后台重定向符号,发起了新的后台请求;此处未处理完成,需要再发送请求,请求内容是「/index.shtml」
2:在工程中寻找指定文件名的页面模板文件;此处已处理完成,只需把已处理好的数据(或者没有数据),发给页面模板文件展示即可(ps:也可以理解为html后缀的页面文件)。
二、后台错误处理的疑问
在外部审计平台中已实现效果:后台若抛出异常信息{"code","msg"},在某个ErrorAction中统一处理,展现给用户的是一个自定义错误页面,页面风格统一,同时能显示异常信息msg的内容和返回之前正常页面的按钮。
三、关于优化equity项目代码:
用stringMap把所有bean的属性逐一存进去,影响代码可读性,并且写起来也麻烦
方案1:最简单的,在bean中添加一些属性,后台方法查询出来的另一些属性,设置进去。或者根据联合查询,获取需要的属性值。
方案2:担心污染bean的有序性?查询出来的所有属性,按照bean分类存储,thymleaf中用「beanA.属性;beanB.属性;属性」的方式取出来。
方案3:最规范的,使用po「存储object」和vo「展示object」,不同对象的用途不同,缺点是麻烦,如果仅有几个属性不建议这样做。
担心上线后,由于少数后台参数错误导致整个页面错误?
thymleaf中使用下面写法:「bean?.属性」或「属性.」
特殊字符:三角符号
▶
代码建议:
无需实例化 dateUtils
若需要实例化,请加上@Autoweird或@Resource@service注解
四、页面代码优化:
thymleaf模板注意事项
注意:
下面这段代码中{{if type}} {{else} {{/if}}不能滥用,因为若type的类型为int,后台传来的值为「0」则解析时,认为没有获取值,因此表格中会显示为「null」。
{{if type}}<td>${type}</td>{{else}}<td>undefined</td>{{/if}}
亲测截图:选中行的所有值都为0,其中「权益类型、申请环境、有效期限」字段的类型为int,如果使用下面的代码,效果如下:
{{if name}}<td>${name}</td>{{else}}<td>null</td>{{/if}}
{{if type}}<td>${type}</td>{{else}}<td>null</td>{{/if}}
{{if productId}}<td>${productId}</td>{{else}}<td>null</td>{{/if}}
{{if channelId}}<td>${channelId}</td>{{else}}<td>null</td>{{/if}}
{{if currentCostCount}}<td>${currentCostCount}</td>{{else}}<td>null</td>{{/if}}
{{if environmentType}}<td>${environmentType}</td>{{else}}<td>null</td>{{/if}}
{{if validPeriod}}<td>${validPeriod}</td>{{else}}<td>null</td>{{/if}}
{{if approveStatus}}<td>${approveStatus}</td>{{else}}<td>null</td>{{/if}}