最近,在开发中遇到一个奇怪的问题,想请教大家帮忙解决。
原来,我们公司在开发一套关于商品的系统,早先的开发人员编写的一个应用程序,有一个商品总览的页面,在此,成为页面1.jsp,这个1.jsp里,用静态include方法添加了1个2.jsp的页面,其中有一段是关于商品信息总览页面的分页的。代码段如下:
//上一页
if ('${page}' != '1' && '${page}' != '') {
$("#Tools17").toggleClass('Tools17_disable').toggleClass('Tools17');
$("#Tools17").on('click', function() {
searchItemByPageNo('${prePage}');
});
}
//下一页
if ('${page}' != '${total}') {
$("#Tools19").toggleClass('Tools19_disable').toggleClass('Tools19');
$("#Tools19").on('click', function() {
searchItemByPageNo('${nextPage}');
});
}
//最后一页
if ('${page}' != '${total}' && eval('${total}') > eval('${page}')) {
$("#Tools18").toggleClass('Tools18_disable').toggleClass('Tools18');
$("#Tools18").on('click', function() {
searchItemByPageNo('${total}');
});
}
//第一页
if ('${page}' != '1' && '${page}' != '') {
$("#Tools16").toggleClass('Tools16_disable').toggleClass('Tools16');
$("#Tools16").on('click', function() {
searchItemByPageNo('1');
});
}
请注意,这个${page}变量,我一直不知道这是引用哪个程序?
问题就在于,后来,我接手了继续根据用户需求开发的工作,我开发了另一个应用程序—商品退货,开发完成后,用户反映,使用我的程序没问题,只是,在退出我的程序,重新回到商品总览的页面的时候,却发现页面虽然显示出来了,只是,动态输入商品货号,原来显示出的信息,都不显示了。
昨天,我仔细地查找了错误,发现当点击完商品总览页面菜单以后,URL跳转到1.jsp,加载了2.jsp后,chrome浏览器F12报错,identifier报错,点击出错的行,跳转到了每个${page}处,这里显示出来这个变量引用了我编写的一个后台分页程序Page.java的地址,并且,连实时运行的SQL语句也暴露在里面。
无奈,以前的开发人员写的程序已经达成JAR包,无法修改,我只好修改自己的Page.java程序,改名为MyPage.java, 同时,把放入session的sessionKey从page,改成pagination.
然后,我启动程序,结果,当我点击商品总览菜单命令,后台依然报这个错误,只是原来${page}引用的路径从com.xxx.xx.Page@xxx 变成了com.xxx.xx.MyPage@xxx,
我现在想请教大家,究竟这个${page}引用的是什么?从哪里可以找到,为何它引用了另一个package里的程序?如果是重名冲突,我修改了我的类名,为何还是这样?
谢谢!
我再补充一些,我在2.jsp页面引用的js里,找到了以下的一些代码
function searchItemByPageNo(pageNo) {
$.ajax({
type : 'post',
url : ctx + '/item/query/itemBaseInfoPage',
data : {
page : $.trim(pageNo)
},
success : function(data) {
/*$("#content").children().remove();
$("#content").html(data);*/
$("#ovreviewContent").empty();
$("#ovreviewContent").html(data);
//显示创建人等信息
$("#message").show();
// 设置订货方式
setItemStoreInfoOrdCreatMethd();
//设置条码
setItemBarcode("");
// 屏蔽查询
$('#Tools6').removeClass('Tools6').addClass('Tools6_disable').unbind("click");
//重置按钮
overviewReset();
}
});
}
是不是2.jsp里的${page}就是来自于这段js里的page变量?如果,是的话,我顺藤摸瓜,找到这个URL对应的代码:
/**
* 商品总览-详情页面分页
*
* @param model
* @param itemNo
* @return
*/
@RequestMapping("/itemBaseInfoPage")
public String itemBaseInfoPage(HttpServletRequest request, HttpServletResponse response, Model model, String storeNoSearch, String storeNameSearch, String itemNoSearch, String itemNameSearch,
Integer page, String barcodeSearch) {
String searchAll = "";
//基本信息
if (null == page) {
page = 1;
}
SearchCondItemBasicVO searchVO =new SearchCondItemBasicVO();
if(StringUtils.isNotEmpty(itemNoSearch)){
searchVO.setItemNo(new Integer(itemNoSearch));
}else{
searchAll = "1";
model.addAttribute("searchAll",searchAll);
}
setSearchParam(model,storeNoSearch,storeNameSearch,itemNoSearch,itemNameSearch,searchAll);
if(StringUtils.isNotEmpty(barcodeSearch)){
/*itemNo = this.getItemNoByItemBarcode(barcode);*/
searchVO.setBarcode(barcodeSearch);
}
PaginationSettings ps = new PaginationSettings();
List<Ordering> orderList = new ArrayList<Ordering>();
Ordering order = new Ordering(true,"itemNo");
orderList.add(order);
ps.setOrderBy(orderList);
ps.setPageNo(page);
ps.setPageSize(1);
ItemsFacade nf = ServiceUtil.getService("itemsFacade", ItemsFacade.class);
PaginationResult paginationResult = nf.searchItemBasicList(ps, searchVO);
if (paginationResult.getTotalCount() == 0 || paginationResult.getTotalCount() == null) {
Map<String, Object> jsonMap = new HashMap<String, Object>();
jsonMap.put("message", "没有找到对应的数据信息!");
return ajaxJson(response, jsonMap);
}
ItemBasicVO itemBasicVO = (ItemBasicVO)paginationResult.getData().get(0);
model.addAttribute("total", paginationResult.getTotalCount());
model.addAttribute("page", page);
model.addAttribute("prePage", page - 1);
model.addAttribute("nextPage", page + 1);
String searchItemNo = StringUtils.isNotEmpty(itemNoSearch) ?itemNoSearch : itemBasicVO.getItemNo().toString();
if(StringUtils.isBlank(barcodeSearch)){
List barcodeList = nf.getItemBarcodeListByItemNo(new Integer(searchItemNo));
if(!barcodeList.isEmpty()){
model.addAttribute("barcodeSearch",((Map)barcodeList.get(0)).get("barcode"));
}
}else{
model.addAttribute("barcodeSearch", barcodeSearch);
}
return this.itemBaseInfo(request,model, storeNoSearch, storeNameSearch, searchItemNo, itemNameSearch,searchAll);
}
可是,怎么会引用我的另一个包下面的类文件呢?我百思不得其解。请大家帮忙解决。谢谢。
大家有人知道这个变量是何原因造成的吗?