如下代码中及其不合理的地方
public void execute(Environment env, Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException {
Pagination page=new Pagination();
CmsSite site = FrontUtils.getSite(env);
String orgName=DirectiveUtils.getString(PARAM_ORG_NAME, params);
int areaId=site.getAreaId().getId();
List list=reportMng.getList(areaId);
if(null!=page.getList()||null!=list) //从这开始未对page 或list 初始化 导致编译为通过后条件大括号一直控制到结尾影从而影响代码的维护性,也导致后面无需用page list对象的条件也放进来
{
page = reportMng.queryOrg_InfoCount(site.getId(),site.getAreaId().getId(),orgName,1, 10);
Map<String, TemplateModel> paramWrap = new HashMap<String, TemplateModel>(
params);
paramWrap.put(OUT_BEAN, DEFAULT_WRAPPER.wrap(site));
paramWrap.put(OUT_PAGINATION, DEFAULT_WRAPPER.wrap(page));
paramWrap.put(OUT_LIST,DEFAULT_WRAPPER.wrap(list));
Map<String, TemplateModel> origMap = DirectiveUtils
.addParamsToVariable(env, paramWrap);
InvokeType type = DirectiveUtils.getInvokeType(params);
String listStyle = DirectiveUtils.getString(PARAM_STYLE_LIST, params);
if (InvokeType.sysDefined == type) {
if (StringUtils.isBlank(listStyle)) {
throw new ParamsRequiredException(PARAM_STYLE_LIST);
}
env.include(TPL_STYLE_LIST + listStyle + TPL_SUFFIX, UTF8, true);
} else if (InvokeType.userDefined == type) {
if (StringUtils.isBlank(listStyle)) {
throw new ParamsRequiredException(PARAM_STYLE_LIST);
}
FrontUtils.includeTpl(TPL_STYLE_LIST, site, env);
} else if (InvokeType.custom == type) {
FrontUtils.includeTpl(TPL_NAME, site, params, env);
} else if (InvokeType.body == type) {
body.render(env.getOut());
} else {
throw new RuntimeException("invoke type not handled: " + type);
}
DirectiveUtils.removeParamsFromVariable(env, paramWrap, origMap);
}
}
现在贴上修改后代码:
public void execute(Environment env, Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException {
//对page, list对象先初始化 使其对象有个地址指向
List<Org_Info> list = new ArrayList();
Pagination page=new Pagination();
CmsSite site = FrontUtils.getSite(env);
String orgName=DirectiveUtils.getString(PARAM_ORG_NAME, params);
int areaId=site.getAreaId().getId();
list=reportMng.getList(areaId);
//初始化后虽然没值 但有地址指向 至使 对象不为null 能够编译通过
page = reportMng.queryOrg_InfoCount(site.getId(),site.getAreaId().getId(),orgName,1, 10);
// if(null!=page.getList()||null!=list)
// {
//
// }
Map<String, TemplateModel> paramWrap = new HashMap<String, TemplateModel>(
params);
paramWrap.put(OUT_BEAN, DEFAULT_WRAPPER.wrap(site));
paramWrap.put(OUT_PAGINATION, DEFAULT_WRAPPER.wrap(page));
paramWrap.put(OUT_LIST,DEFAULT_WRAPPER.wrap(list));
Map<String, TemplateModel> origMap = DirectiveUtils
.addParamsToVariable(env, paramWrap);
InvokeType type = DirectiveUtils.getInvokeType(params);
String listStyle = DirectiveUtils.getString(PARAM_STYLE_LIST, params);
if (InvokeType.sysDefined == type) {
if (StringUtils.isBlank(listStyle)) {
throw new ParamsRequiredException(PARAM_STYLE_LIST);
}
env.include(TPL_STYLE_LIST + listStyle + TPL_SUFFIX, UTF8, true);
} else if (InvokeType.userDefined == type) {
if (StringUtils.isBlank(listStyle)) {
throw new ParamsRequiredException(PARAM_STYLE_LIST);
}
FrontUtils.includeTpl(TPL_STYLE_LIST, site, env);
} else if (InvokeType.custom == type) {
FrontUtils.includeTpl(TPL_NAME, site, params, env);
} else if (InvokeType.body == type) {
body.render(env.getOut());
} else {
throw new RuntimeException("invoke type not handled: " + type);
}
DirectiveUtils.removeParamsFromVariable(env, paramWrap, origMap);
}
可见对象未初始化对其后面的代码修改及逻辑影响有着决定性的影响,当涉及到代码整体修改时,先自问对其初始化否,进而再下结论。
分享到:
相关推荐
typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化
主要介绍了C#中结构(struct)的部分初始化和完全初始化,通过实例分析了结构初始化中常见的错误及技巧,有助于加深对C#结构(struct)的认识,需要的朋友可以参考下
ddr初始化 原理 sdram bootloader中的初始化
hertzbeat部署使用到的sql初始化及初始yml,修改对应的邮箱服务器即可
ICM20602数据读取及初始化配置,SPI通信,自检,初始化配置,读取数据,有需要的可以拿去使用。
⇒ 之后进行默认驱动程序的初始化, 使系统及其外围设备快速进入默认状态。 驱动程序进一步的初始 化可在 CPU0 上继续进行, 也可切换到 CPU1,如果驱动程序初始化过程需要锁步核校验。 ⇒ 执行重要安全部件的启动...
LPC2366串口初始化代码分析,包括波特率如何计算、管脚配置、工作模式选择、中断寄存器配置等。
IRQ hierarchy的初始化及构建过程详解
扬州工厂上线 EAS系统调整、配置及初始化方案 信息管理部 二零一六年三月 信息系统初始化方案全文共6页,当前为第1页。 文档控制 信息系统初始化方案全文共6页,当前为第1页。 更改记录 日期 作者 版本 更改参考/...
双向链表的初始化删除及其插入操作,欢迎大家下载
数据初始化,选择备份点,初始化,备份,恢复等等ddddd
RN8209C及D初始化及UART通讯参考程序
关于pll自己的些许简介 希望能对大家有所帮助呢 有最初始化的状态
SIM900A模块连接示意及初始化流程,及调试流程
一般用于正版软件和数据的外接加密硬件,形状和普通的U盘差不多,应用的时把他插在USB接口上,他的作用就是如果要运行这种带加密狗的软件,就必须要把加密狗插到电脑上 , 说白了 就是软件密钥 接码器
InvenSense ICM-20600/20602 初始化和自检程序,使用STM32F4平台,SPI通讯
AVR串口通信初始化设置及例程 Atmega128有两个串口:USART0与USART1 以USART0为例 串口的初始化包括: 传输模式的选择:同步还是异步,默认为异步模式,可通过选择USART控制和状态寄存器UCSR0C中的UMSEL位来选择,UMSEL为0...
STM32F4 SPI2初始化及收发数据
oracle 初始化参数 的列表及说明