From ebdb4f4ded8bd24986128df47e032d22cdf6db11 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Sat, 09 Jul 2022 14:18:04 +0800
Subject: [PATCH] fix 全站发布

---
 src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java |   36 +++++++++++++-----------------------
 1 files changed, 13 insertions(+), 23 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
index f97655c..783dfe1 100644
--- a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
+++ b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
@@ -8,8 +8,10 @@
 import com.xcong.farmer.cms.core.tag.TagsEnum;
 import com.xcong.farmer.cms.core.template.Configuration;
 import com.xcong.farmer.cms.core.template.TemplateConfiguration;
+import com.xcong.farmer.cms.utils.GroovySingleton;
 import groovy.lang.Binding;
 import groovy.lang.GroovyShell;
+import groovy.lang.Script;
 import org.apache.commons.text.StringSubstitutor;
 import org.jsoup.nodes.Attribute;
 import org.jsoup.nodes.Attributes;
@@ -195,24 +197,8 @@
         Map<String, String> targetData = new HashMap<>();
         while (matcher.find()) {
             String group = matcher.group();
-//            String splitValue = group.replaceAll("\\$\\{", "").replaceAll("}", "");
-//            String[] split = splitValue.split("\\.");
-//            if (split.length == 0) {
-//                continue;
-//            }
-//
-//            for (Map.Entry<String, Object> entry : this.parserData.entrySet()) {
-//                String fieldKey = entry.getKey();
-//                Map<String, Object> data = (Map<String, Object>) entry.getValue();
-//                JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(data.get("state")));
-//
-//                for (Map.Entry<String, Object> map : jsonObject.entrySet()) {
-//                    if (map.getValue() instanceof String) {
-//                        targetData.put(fieldKey + "." + map.getKey(), (String) map.getValue());
-//                    }
-//                }
-//            }
 
+            GroovyShell groovyShell = GroovySingleton.getSingleton();
             Binding binding = new Binding();
             for (Map.Entry<String, Object> entry : this.parserData.entrySet()) {
                 String fieldKey = entry.getKey();
@@ -224,12 +210,16 @@
                 binding.setProperty("system", systemData);
             }
 
-            GroovyShell shell = new GroovyShell(binding);
-            Object evaluate = shell.evaluate(group);
-            if (evaluate == null) {
-                targetData.put(group, "");
-            } else {
-                targetData.put(group, evaluate.toString());
+            synchronized (this) {
+                Script parse = groovyShell.parse(group);
+                parse.setBinding(binding);
+                Object evaluate = parse.run();
+                if (evaluate == null) {
+                    targetData.put(group, "");
+                } else {
+                    targetData.put(group, evaluate.toString());
+                }
+                groovyShell.getClassLoader().clearCache();
             }
         }
 

--
Gitblit v1.9.1