SpringBoot使用Enjoy模板自定义标签时问题

如题,使用enjoy模板时,自定义标签,页面动态给标签方法传递参数时候遇到点问题,请教大家帮忙解答一下。

标签JAVA代码:

public class AttributeTag {
  public String show(String attrListJson) {
     String str = .....; //此处省略逻辑处理
     return str;
  }
}

springBoot WebConfig中标签注册:

@Bean(name = "jfinalViewResolver")
public JFinalViewResolver getJFinalViewResolver() {
	JFinalViewResolver jfr = new JFinalViewResolver();
	// setDevMode 配置放在最前面,开启热加载
	jfr.setDevMode(true);

	// 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件
	jfr.setSourceFactory(new ClassPathSourceFactory());

	// 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath
	// 代替 jfr.setPrefix("/view/")
	JFinalViewResolver.engine.setBaseTemplatePath("/template/");

	jfr.setSuffix(".html");
	jfr.setContentType("text/html;charset=UTF-8");


	// 支持#(session.value) 的方式访问
	jfr.setSessionInView(true);
	
	//注册自定义的标签
	jfr.addSharedObject("attr", new AttributeTag());
		
	jfr.addSharedFunction("/common/layout.html");
		
	return jfr;
}


enjoy页面模板使用【在此过程遇到问题】,

$.post("/a.action", function(result){
    var attJson = JSON.stringify(result);
    //调用标签,期望获取数值。
    var htmlVal = "#(attr.show("+attJson+"))";
    $("#attr_html").empty().append(htmlVal);
});

问题描述:js中使用标签,传递动态参数值时,DEBUG后台AttributeTag#show(String)方
法,传递的参数竟然是:"+attJson+"。

请教解答:怎样才能正确获取到动态参数值?  谢谢!


评论区

土申

2018-08-08 12:12

@JFinal 老大有闲暇时间,帮解答一下,谢谢。

JFinal

2018-08-08 12:16

jfr.addSharedObject("attr", new AttributeTag()) 这个添加共享对象,不是自定义标签,enjoy 中其实没有自定义标签,而是有自定义指令

你的用法如下:
var htmlVal = "#(attr.show("+attJson+"))";

内部是参数,用法改一下:
#(attr.show(attJson));

但你的 attJson 是 js 代码生成的,这里就存在一个先后问题,特别要注意,模板引擎执行在先,其渲染出来的 js 代码执行在后,所以你的代码本质是先后次序问题

通过在浏览器中点击右键,查看生成的 html 体会一下生成的值,就能知道这个先后问题

模板引擎是后端的东西,而 js 是纯浏览器中运行的前端的东西,前端的东西当然是不能先于后端运行的

土申

2018-08-08 12:55

@JFinal 嗯,确实如此。 并且该指令只是在页面加载时候执行一次,比如我通过点击事件,触发$.post()没有再执行指令。
那就放弃使用指令的方式,考虑使用ajax接口请求返回动态内容。

热门反馈

扫码入社