NutzCN Logo
问答 兽总,自己扩展一个FreeMarkerView,用于加入全局的东西。怎样加到NUTZ里啊
发布于 3110天前 作者 qq_4596d506 2240 次浏览 复制 上一个帖子 下一个帖子
标签:
public class FreemarkerViewTool extends FreeMarkerView

Spring里是这样加的

<bean id="viewResolver"
          class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="cache" value="false"/>
        <property name="prefix" value=""/>
        <property name="suffix" value=".ftl"/>
        <property name="exposeSpringMacroHelpers" value="true"/>
        <property name="exposeRequestAttributes" value="true"/>
        <property name="exposeSessionAttributes" value="true"/>
        <property name="requestContextAttribute" value="rc"/>
        <property name="contentType" value="text/html;charset=UTF-8"/>
        <property name="order" value="0"/>
        <!-- 自定义FreeMarkerView,用来定义项目的全局路径 -->
        <property name="viewClass" value="com.llh.passport.util.FreemarkerViewTool"/>
    </bean>

Nutz里咋弄啊

17 回复

禁止使用'兽总/有问题求教/救命/看过来/求帮忙'之类的无意义语句.

写个ViewMaker实现, 参考 https://github.com/nutzam/nutzmore/blob/master/nutz-plugins-views/src/main/java/org/nutz/plugins/view/freemarker/FreemarkerViewMaker.java

然后在MainModule的@Views注解引用之.

@wendal 需要得到request 。 这种方式是不是不太好啊,全局的东西在哪加比较好啊?过滤器?

为啥需要得到req,项目还没启动完之前,哪来req

@wendal 我看spring里面的代码源码就是把内容塞到request里然后页面${}的。。
如果不得到req 怎么塞啊-,-

View的render方法就能得到req, 不晓得你想着什么地方得到req

@wendal

protected void doRender(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
		for (Map.Entry<String, Object> entry : model.entrySet()) {
			String modelName = entry.getKey();
			Object modelValue = entry.getValue();
			request.setAttribute(modelName, modelValue);
		}
}

nutz 的FreemarkerView
public void render(HttpServletRequest request, HttpServletResponse response, Object value)
有一个value参数
我要向像上面那样放到req里面,需要重写一下doRender喽?

doRender是什么东西

render方法的value是方法的返回值

@wendal 有什么方式可以吧我要放到request里的内容传到render 的value参数里 到里面进行处理啊

没理解这句话?

render方法的value是方法的返回值

request里面的内容放到value有什么意义?? 要改value,那就是变量罢,重新赋值不就完了

public void render(HttpServletRequest request, HttpServletResponse response, Object value) {
    value = "我要上天";
	value = “我不要下地”;
}

没看过nutzmore里面的实现?

https://github.com/nutzam/nutzmore/blob/master/nutz-plugins-views/src/main/java/org/nutz/plugins/view/freemarker/FreemarkerView.java

@wendal 从哪里给Object value赋值的。。

@wendal render(req,res,xxxxxxxxxxxxx) 从哪里传啊

org.nutz.mvc.impl.processor.ViewProcessor 调用的

@wendal

public void render(HttpServletRequest request, HttpServletResponse response, Object value) throws Throwable {

		//比如我可以在这里处理
		**request.setAttrbute("xxx",  value.xxx);**

		String $temp = evalPath(request, value);
		String path = getPath($temp);
		ServletContext sc = request.getSession().getServletContext();
		Configuration cfg = freeMarkerConfigurer.getConfiguration();
		Map<String, Object> root = new HashMap<String, Object>();
		root.put(OBJ, value);
		root.put(REQUEST, request);
		root.put(RESPONSE, response);
		HttpSession session = request.getSession();
		root.put(SESSION, session);
		root.put(APPLICATION, sc);
		root.put("props", System.getProperties());// .get("java.version")
		Map<String, String> msgs = Mvcs.getMessages(request);
		root.put("mvcs", msgs);

这是到底把value传到req的attr, 还是咋的?

//我要放到request里的内容传到render 的value参数里 到里面进行处理啊

//比如我可以在这里处理
**request.setAttrbute("xxx",  value.xxx);**

@wendal
Map<String, Object> map ;
map.put("base", "xxxxxxxxxxxx");
map.put("version", "1.0");

render(req,res,map);

public void render(HttpServletRequest request, HttpServletResponse response, Object value) throws Throwable {
Map<String, Object> map = (Map<String,Object>)value;
for (Map.Entry<String, Object> entry : model.entrySet()) {
String modelName = entry.getKey();
Object modelValue = entry.getValue();
request.setAttribute(modelName, modelValue);
}
}

然后 ftl页面
版本:${version}
...

所以你要的东西跟value没有半点关系.

public class XXXXView {
     protect NutMap global ;
	 
	 public XXXXView(NutMap global ) {
	      this.global = global;
	 }
 
    public void render(HttpServletRequest request, HttpServletResponse response, Object value) throws Throwable {
        request.setAttribute("global", global);
		super.render(...);
    }
}

版本:${global.version}
版本:${request.global.version}
添加回复
请先登陆
回到顶部