jfinal中#if()里面的表达式判断是否包含该怎么写?

就是#if() #end里面条件是包含关系,并不是相等关系应该怎么写?

评论区

JFinal

2018-04-13 11:26

什么包含? 是 list 还是 map ,还是 String?

enjoy 引擎与 java 表达式是打通的,这样用就可以:
#if( "abcdef".contains("abc"))
#if(mapAAA.contains(mapBBB))
#if(listAAA.contains(listBBB))

多看下手册,这部分内容也就一个章节

圣威

2018-04-13 11:29

string,我是在后端通过逻辑拼凑直接生成一个前端编辑页面,如上参数是通过后端传输的

JFinal

2018-04-13 11:32

@圣威 心中记着:enjoy 表达式是与 java 表达式直接打通的,然后就可以 just do it了

圣威

2018-04-13 11:32

sb.append("#if(attr." + attrdefinition.getName() + ".contains \"(" + value.getName()+ ")\") checked #end"),这样写好像不识别

JFinal

2018-04-13 11:33

@圣威 你这到底是 Java 代码还是模板代码?
sb.append(...) 这个看着是 java , #if(attr ... 这个看着是模板,这是要做什么?

圣威

2018-04-13 11:36

就是在数据库把表单的模板配好,在Java里面根据规则自动生成表单的展示编辑页面(html),会通过jfinal的template模板模式展示数据

圣威

2018-04-13 11:38

通过controller层的render到这个html页面

JFinal

2018-04-13 11:40

@圣威 无论模板数据在哪里,模板就是模板,而不能是 sb.append(...) 这种代码,除非你是在用 Java 代码动态生成模板代码,才会有 sb.append(...) 存在

将拼接好的模板输出来,看看语法对不对,然后就知道如何改进了

此外,模板的核心目标之一就是避免 String 拼接的,所以直接利用模板的功能去写内容,尽可能不要使用 sb.append(...) 这种东东

#if(attr.attrdefinition.getName().contains(value.getName()))
checked
#end

圣威

2018-04-13 11:42

把.contains换成==,去掉后面参数的括号是完美支持的,但是这个编辑框是checkbox的,支持多选,所以就看文档也没看到这种例子

圣威

2018-04-13 11:44

就是一种动态生成的

圣威

2018-04-13 11:51

大概懂了,谢谢

杜福忠

2018-04-13 12:48

兄弟~ 魔版渲染模版的魔版 了解一下~
new Engine().getTemplateByString(stringTemplate).renderToString(Kv.by("a", 2))

杜福忠

2018-04-13 12:56

new Engine()
.getTemplateByString(
"#('#')if(attr.#(name).contains(\"#(name)\") checked #('#')end"
)
.renderToString(Kv.by("name", attrdefinition.getName()))
根据你刚拼接的字符串>> 这样也可以拼接

热门反馈

扫码入社