首先,我百度了模板引擎,研究了下NVelocity,
但是还是没有什么好的思路解决实际问题
实际问题是这样的
比如说短信
尊敬的xx 先生/女士:
您在xx 时间,xx 地点,消费了 xx 人名币/美元/等等币种, 出库单号为:xx
网上订单号为xx,将有 xx (韵达) 承运, 等等
这样一个短信里,就包含了姓名,消费时间,消费地点,消费币种,出库单号,网上订单号,承运商,运单号等字段,而模板里也许今天是这样的,明天客户就想改成只有出库单号,网上订单号这两个字段内容的短信,动态的数据源和动态的模板内容,如何做呢?
还有邮件,邮件就更头痛了,要在一封邮件里包含支付信息,订单详情,等等查询结果,跟上面一样,显示的内容和获取的数据源都会发生改变,这样的模板功能,应该如何设计或者从哪方面做手做呢?如果用NVelocity来做的话。
求各位大神指点了
首先是根据我搜索的模板引擎,是可以把内容通过替换进行动态,
现在的问题是字段也要求动态化,
比如说第一次是要求收货人,收货地址,承运商的话
第二次就要增加收货人电话,承运商联系电话两个字段,这跟数据源就有关系了。也是纠结
被编程大叔说中了
我研究了NVelocity
在NVelocity里,支持后台调用方法,也支持整个动态调用,后面有空了,会将此次解决内容,写个blog
当然也找到了雷同NVelocity解决方案,并且开源的,如FluentEmail
var template = "Dear @Model.Name, You are totally @Model.Compliment."; var email = Email .From("bob@hotmail.com") .To("somedude@gmail.com") .Subject("woo nuget") .UsingTemplate(template, new { Name = "Luke", Compliment = "Awesome" });
你好啊,请问这个blog写了吗,目前我也遇到类似的问题。
@YiiCheng: FluentEmail 你看下他的开源的wiki就有解答
@澜紫癜青:好的,谢谢你
你可以通过XML来配置模板,读取数据后并填充到XML中的节点上即可
你需要解决两个问题,第一个,如何把模板变成最终内容,就像楼上所说,比如已经做好的XML模板,读取后把相应的占位符给替换了;第二个,动态模板,你得有个模板编辑的功能给用户,提供两个样本,邮件和短信,用户编辑完成后就保存起来,然后执行第一个的解决方案。
Razor引擎解析html就是模板。你可以把Razor拿来用。如果你的模板简单,那就直接使用特定占位符,然后用真实数据来replace。
首先,模板是你已知的,所以数据源你自己需要对应好。
如果你的模板是用户来维护的,那你要写明,如果使用占位符,支持哪些占位符(也就是你可以提供哪些数据)
找一个模板引擎 然后再做 我这里推荐
RazorEngine
顶楼上.你需要Razor引擎.在github里.特别好用.
你可以建一个邮件或者短信模板数据库表 ,然后再后台编写好各种模板,比如注册通知模板,通知订单模板模板的内容可以写成固定动态的比如
尊敬的${userName}先生/女士:
您在${newTime}时间,${}地点,消费了 ${}人名币/美元/等等币种, 出库单号为:${}
网上订单号为${},将有 ${}(韵达) 承运, 等等
通过调用这个模板时把对应的动态数据传过去,
String content = MailUtils.getMailText(map, sysMailTemplate.getContent());//这里面传的参map为动态用户数据,sysMailTemplate为模板内容
//通过模板构造邮件内容,将模板中的变量替换成map中的值,注:模板中的变量与map中的key保持一致。 public static String getMailText(Map<String, Object> map, String htmlTemplate) { String htmlText = htmlTemplate; //遍历Map中的所有Key,将得到的value值替换模板字符串中的变量值 Set<String> keys = map.keySet(); for (Iterator<String> it = keys.iterator(); it.hasNext();) { String key = it.next(); htmlText = htmlText.replace("${" + key + "}", (String) map.get(key)); } return htmlText; }
类似这种办法就可以动态显示邮件的内容,然后获取到内容发邮件或者短信。
谢谢回答,主要是现在内容和字段都是动态的,并非是简单的字段替换可以解决
题主不是不知道怎么编程,只是脑袋一下没转过弯来。
自己慢慢想想就能相通了。你都已经知道"模板引擎"。
呵呵,说白了还是字符串拼装、替换。。