如何在扩展的Intercept获取更多的配置参
大鹏鸟 发布于31月前 2答/3977阅

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())); 


[沙发] Jieven
@大鹏鸟
一句代码即可
setAttr("query", this.getRequest().getQueryString());
本周发布
[地板] Jieven
@大鹏鸟 V1.6.0 已发布,并解决本需求
提交评论
嘿,我来帮你!