您的位置:首页 > 其它

怎样利用模板拼接字符串

2015-10-18 10:24 288 查看
  近期的项目里在做消息的模块,负责系统内容的各种消息。有些消息的格式是固定的,每次改变的只是用户名等固定的几个字段。为了方便的维护这些消息,我们系统采用消息模板来实现。

  例如:“尊敬的 #username# 您好,您购买的《#bookname#》交易成功!”

  我们只要维护这个模板即可。那么发消息时,怎么将消息替换成相应的字段呢?对于不同的模板,有多个不同的参数该怎么办?

  和消息相关的表有两张,一张是消息类型,一张是消息记录。

  首先,我们需要从消息类型表查找到消息的模板,比如购买消息的模板:“尊敬的 #username# 您好,您购买的《#bookname#》交易成功!”

  接着,我们可以根据传入的参数对变量进行替换,这里用map存放参数.

controller代码:

//参数1.消息模板名称
String messageTypeName="购买";

//参数2.要传入的字段
Map<String,String> map = new HashMap<String,String>();
map.put("username", "张三");
map.put("coursename", "JSP应用开发与实践");

//参数3.接收消息的id
String receiveMessageId="UWUi4B6Z93h1nr4NiM19k4";

//参数4.发送消息的id
String sendMessageId="UWUi4B6Z93h1nr4NiM19k4";
<span style="white-space:pre">			</span>//方法调用
<span style="white-space:pre">			</span>messageRecordBean.saveMessageRecord(messageTypeName, map, receiveMessageId, sendMessageId);


service实现:

//获取模板内容【查询方法略】
String messageTemplate=messageType.getMessageTemplate();

//获取map集合中的所有键,存入到Set集合中,
Set<Map.Entry<String,String>> entry = map.entrySet();
//通过迭代器取出map中的键值关系
Iterator<Map.Entry<String,String>> it = entry.iterator();
while (it.hasNext())
{
//将键值关系取出存入Map.Entry这个映射关系集合接口中
Map.Entry<String,String>  me = it.next();
//获取键值,进行替换
messageTemplate=messageTemplate.replaceAll("#"+me.getKey()+"#", me.getValue());
}

//3.添加到消息实体
MessageRecord messageRecord=new MessageRecord();
messageRecord.setMessageRecordContent(messageTemplate);
messageRecord.setMessageTypeId(messageType.getId());
messageRecord.setReceiveMessageId(receiveMessageId);
messageRecord.setSendMessageId(sendMessageId);
messageRecord.setIsRead(0);

//成功返回true,否则返回false
try {
messageRecordEao.saveGeneric(messageRecord);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;


  主要的实现思路:使用map存放变量值,使用迭代器将模板中的变量替换为对应的map值。然后将获取的值保存到消息记录里。

  业务虽然不是很难,但是通过自己的思考一步一步把它实现,心里特别的开心!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息