1、扩展的Doc1Intercept中初始化数据,需要页面传递的参数,目前项目不支持;
2、在增加菜单功能中配置的Json参数,智能被Control获取,Intercept无法获取;
3、Control 不开放,有时需要在Control 增加一些方法,如 email 发送邮件,message发送消息等;
用Jive群主的方式,用 重载类做了一些尝试,解决了以上问题,我的解决方案如下,希望Jive采纳。
1. 在control 中通过Request.getParamter方式获取所有的参数,组成完成请求param参数,参数如下:
private String paramersToUrl()
{
StringBuffer strBuffer = new StringBuffer();
Enumeration names = ctrl.getRequest().getParameterNames();
if(names.hasMoreElements())strBuffer.append("?");
for (;names.hasMoreElements();) {
String name =names.nextElement() ;
strBuffer.append(name).append("=").append(ctrl.getRequest().getParameter(name)).append("&");
}
return strBuffer.toString();
}
public void list() {
String menuCode = this.getPara(0);
Menu menu = Menu.dao.findByCode(menuCode);
setAttr("para", this.getPara()+paramersToUrl());
render("/eova/template/office/list.html");
}
实现 从list -- show - file --other method方式,都能获得参数,在Intercept中获取参数如下。
public void init(Controller ctrl, HashMap data) throws Exception {
/**
* function(value,row,index,field){
var url='/office/list/biz_office_doc2?infoid'+row.infoid+'&dbname=ib_bulletin';
return ''+value+'';
} */
String infoid = null;
String dbname = null;
if(infoid == null)
infoid = ctrl.getRequest().getParameter("infoid");
if(dbname == null)
dbname = ctrl.getRequest().getParameter("dbname");
InfoDetailDAO detail = new InfoDetailDAO(dbname);
InfoBidding id = detail.find(infoid);
// 带入infoid 和 dbname
Record r = new Record();
if(id !=null) {
r.set("infocome", id.getInfocome());
r.set("infourl", id.getInfoUrl());
r.set("infotitle", id.getInfotitle());
r.set("infotype", id.getInfotypename());
r.set("infoid", id.getInfoid());
r.set("sendtime", DateUtil.toString(id.getSendtime()));
r.set("infocontent", id.getInfocontent().replaceAll("<", "<").replaceAll(">", ">")
.replaceAll(""", "\"").replaceAll(" ", " "));
}
data.put("x", r);
}
2. 在Control 获取菜单信息后,将menu的配置参数,设置到 data,传递给 init初始方法,代码如下:
data.put("menu_params", menu.getConfig().getParams()); //JSONObject
在Intercept中使用如下:
public void init(Controller ctrl, HashMap data) throws Exception {
int days = 0 ;
int searchrange = 1 ;
String keywords = "长天智远";
Object menuParams = data.get("menu_params");
//data.put("menu_params", menu.getConfig().getParams()); //JSONObject
if( menuParams !=null && menuParams instanceof JSONObject)
{
JSONObject jsonparams = ( JSONObject)menuParams;
days = jsonparams.getIntValue("days");
searchrange = jsonparams.getIntValue("search_range");
keywords = jsonparams.getString("keyword");
}
LogKit.info(String.format("获取数据库,参数:%s....",menuParams ==null?" None":menuParams.toString()));