怎么把一个js变量付给 freemarker 自定义标签的属性

C7BF 2016-11-08 04:12:25
现在有一个情况,要用自定义标签在页面列表中显示字典表中的汉字部分,在后台定义一个freemarker标签getDicName,有以下属性,id,nid,type,value;列表是用easy_ui 动态生成的,所以这一列要在js函数里赋值,js代码如下:
<script type="text/javascript">
var dataGrid;
var winWidth = 800;
var winHeight = 500;
var addTitle = "添加企业"; //添加窗口标题
var addUrl = "/modules/et/enterprise/enterpriseAddPage.html"; // 添加窗口链接地址

var editeTitle = "编辑企业"; //添加窗口标题
var enterpriseEditUrl = "/modules/et/enterprise/enterpriseEditPage.html"; // 添加窗口链接地址
var enterpriseEditParmeters = "'{0}','"+editeTitle+"',"+winWidth+","+winHeight+",'"+enterpriseEditUrl+"','确定'";

var delUrl = "/modules/et/enterprise/enterpriseDelete.html"; // 添加窗口链接地址

var detailTitle = "查看企业";
var detailUrl = "/modules/et/enterprise/enterpriseDetailPage.html"

$(function() {
dataGrid = $('#dataGrid').datagrid({
url : 'enterpriseList.html',
fit : true,
fitColumns : true,
border : false,
pagination : true,
idField : 'id',
pageSize : 10,
pageNums :1,
// pageList : pageList,
sortName : 'id',
sortOrder : 'asc',
checkOnSelect : false,
selectOnCheck : false,
nowrap : false,
singleSelect:true,
columns : [ [
{ field: 'id', title: '编号', width: 50, fixed :true,checkbox : false},
{ field: 'enterprise.serviceCom.name', title: '推荐机构', width: 100, fixed :true,sortable: false },
{ field: 'code', title: '股权代码', width: 100, fixed :true,sortable: false },
{ field: 'name', title: '企业名称', width: 100, fixed :true,sortable: false },
{ field: 'nameEn', title: '企业英文名称', width: 100, fixed :true,sortable: false },
{ field: 'type', title: '企业类型', width: 100, sortable: false, formatter: function(value,row,index){
return "<@getDicName nid='enterprise_type' value='" + value + "' type='nid'> ";
}
} },
{ field: 'property', title: '企业性质', width: 100, sortable: false, formatter: function(value,row,index){
if (value == 1){
return "民营";
} else if(value == 2) {
return "国有";
} else if(value == 3) {
return "合资";
}else if(value == 4) {
return "外资";
}else if(value == 5){
return "其他";
}
} },
{ field: 'regCapital', title: '注册资本', width: 100, sortable: false },
{ field: 'listed', title: '是否挂牌', width: 100, sortable: false, formatter: function(value,row,index){
if (value == 0){
return "否";
} else {
return "是";
}
} },
{ field : 'action',
title : '操作',
width :80,
fixed :true,
formatter : function(value, row, index) {
var str = '';
if (row) {
str += '<dl>';
str += '<dt><a href="javascript:void(0);" onclick="$.fn.formOptions.viewFun('+row.id+',detailTitle,winWidth,winHeight,detailUrl);" title="'+detailTitle+'">查看</a><i class="iconfont"></i></dt>' ;
str += '<dd>';
str += '<a href="javascript:void(0);" onclick="$.fn.dataGridOptions.editFun('+row.id+',editeTitle,winWidth,winHeight,enterpriseEditUrl);" title="编辑企业">编辑</a>';
str += '<a href="javascript:void(0);" onclick="$.fn.dataGridOptions.deleteFun('+row.id+',delUrl);" title="删除">删除</a>';
str += '</dd>'
str += '</dl>'
}
str += ' ';
return str;
}
} ] ],
toolbar : '#toolbar',
onLoadSuccess : function() {
$('#searchForm table').show();
parent.$.messager.progress('close');
}

});
});
</script>

java代码如下:
public void execute(Environment env, Map map, TemplateModel[] loopVars, TemplateDirectiveBody body)
throws TemplateException, IOException {
Iterator it = map.entrySet().iterator();
String id = "", nid = "", type = "", value = "";
while (it.hasNext()) {
Map.Entry entry = (Entry) it.next();
String paramName = entry.getKey().toString();
TemplateModel paramValue = (TemplateModel) entry.getValue();
if (paramName.equals(ID)) {
id = paramValue.toString();
} else if (paramName.equals(NID)) {
nid = paramValue.toString();
} else if (paramName.equals(TYPE)) {
type = paramValue.toString();
} else if (paramName.equals(VALUE)) {
value = paramValue.toString();
}
}
Dict l = null;
if (type.equals("id")) {
long dicId = StringUtil.toLong(id);
l = dao.find(dicId);
} else {
l = dao.find(nid, value);
}
Writer out = env.getOut();
out.write(l.getName());
}

js中的红色部分,在java里获取到的value的值原样输出,就是字符串“" + value + "”,自定义标签没有解析变量,这个问题怎么解?哪位大神帮解答一下。。
...全文
1824 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
康永敢 2018-04-19
  • 打赏
  • 举报
回复
不行的,freemarker编译的时机是在服务端,这时候浏览器还没拿到响应,页面还没渲染,js还没运行
薇尼雅 2016-12-21
  • 打赏
  • 举报
回复
楼主,你的问题解决了吗?
C7BF 2016-11-30
  • 打赏
  • 举报
回复
了解了一下。赋不了。自定义标签会首先渲染。然后才加载js,所以无法赋值。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧