有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java确认电子邮件创建模板并将其与对象组合

我需要在java web应用程序中实现电子邮件确认。我被必须发送给用户的电子邮件所困扰

我需要结合一个模板(确认电子邮件)与用户对象,这将是确认电子邮件的html内容
我曾考虑使用xslt作为模板引擎,但我没有用户对象的xml形式,也不知道如何从用户实例创建xml
我考虑过jsp,但如何使用对象呈现jsp页面并得到html呢

知道我可以使用什么包来创建模板并将其与对象组合吗


共 (3) 个答案

  1. # 1 楼答案

    用户对象有多复杂?如果只有五个字符串值字段(比如说),您可以简单地将它们作为字符串参数提供给转换,从而避免从Java数据构建XML

    或者,JavaXSLT处理器通常提供某种方式从XSLT代码中调用Java对象上的方法。因此,您可以将Java对象作为参数提供给样式表,并使用扩展函数调用其方法。详细信息是特定于处理器的

  2. # 3 楼答案

    我没有学习新代码,而是调试他人复杂的代码,而是决定编写自己的小型实用工具:

    public class StringTemplate {
        private String filePath;
        private String charsetName;
        private Collection<AbstractMap.SimpleEntry<String, String>> args;
    
        public StringTemplate(String filePath, String charsetName,
                              Collection<AbstractMap.SimpleEntry<String, String>> args) {
            this.filePath = filePath;
            this.charsetName=charsetName;
            this.args = args;
        }
    
        public String generate() throws FileNotFoundException, IOException {
            StringBuilder builder = new StringBuilder();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    getClass().getResourceAsStream(filePath),charsetName));
            try {
                String line = null;
    
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                    builder.append(System.getProperty("line.separator"));
                }
            } finally {
                reader.close();
            }
            for (AbstractMap.SimpleEntry<String, String> arg : this.args) {
                int index = builder.indexOf(arg.getKey());
                while (index != -1) {
                    builder.replace(index, index + arg.getKey().length(), arg.getValue());
                    index += arg.getValue().length();
                    index = builder.indexOf(arg.getKey(), index);
                }
            }
            return builder.toString();
        }
    }