From 6601d3ecbdcb94a014eaebe275bf824e2c25ef1a Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 08 Jul 2022 19:01:35 +0800
Subject: [PATCH] fix

---
 src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java |   39 ++++++++++++++++++++++++++++++---------
 1 files changed, 30 insertions(+), 9 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 27d74e6..e43cfca 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
@@ -7,6 +7,8 @@
 import com.xcong.farmer.cms.core.handler.DataParserHandler;
 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 org.apache.commons.text.StringSubstitutor;
@@ -79,17 +81,30 @@
                 this.element.attr("src", STATIC_URL + src);
             }
         }
+
+        if ("link".equals(this.element.tagName())) {
+            String src = this.element.attr("href");
+            if (StrUtil.isNotBlank(STATIC_URL)) {
+                this.element.attr("href", STATIC_URL + src);
+            }
+        }
+
+        if ("script".equals(this.element.tagName())) {
+            String src = this.element.attr("src");
+            if (StrUtil.isNotBlank(STATIC_URL)) {
+                this.element.attr("src", STATIC_URL + src);
+            }
+        }
     }
 
     public void parser() {
+        staticPath();
         // 判断是否为最小节点,如果是且没有特殊标签,则跳过清空
         if (!isNeedEmpty()) {
             return;
         }
 
         this.element.empty();
-
-        staticPath();
         Attributes attributes = this.element.attributes();
         if (attributes.isEmpty()) {
             return;
@@ -131,6 +146,7 @@
             }
         }
 
+
         runDataInject();
     }
 
@@ -144,15 +160,17 @@
             String key = attribute.getKey().replaceAll("\\$", "");
             String value = attribute.getValue();
 
+            String result = attrValueFormat(value);
             // @{} 为java表达式; ${}为需要注入的数据项
             if (value.startsWith("@{")) {
-                value = value.replaceAll("\\@\\{", "").replaceAll("}", "");
+                value = result.replaceAll("\\@\\{", "").replaceAll("}", "");
                 Binding binding = new Binding();
                 for (Map.Entry<String, Object> entry : this.parserData.entrySet()) {
                     String fieldKey = entry.getKey();
                     Map<String, Object> data = (Map<String, Object>) entry.getValue();
-                    binding.setProperty(fieldKey, data);
-                    binding.setVariable(fieldKey + ".index", 1);
+                    binding.setProperty(fieldKey, data.get("state"));
+                    int index = (int) data.get("index");
+                    binding.setVariable( "index", index);
                 }
                 GroovyShell shell = new GroovyShell(binding);
                 String evaluate = (String) shell.evaluate(value);
@@ -160,9 +178,10 @@
                 this.element.removeAttr("class");
                 this.element.attr("class", evaluate);
             } else if (value.contains( "${")) {
-                String result = attrValueFormat(value);
                 if ("text".equals(key)) {
                     this.element.text(result);
+                } else if ("html".equals(key)) {
+                    this.element.html(result);
                 } else {
                     this.element.attr(key, result);
                 }
@@ -195,7 +214,8 @@
 //                }
 //            }
 
-            Binding binding = new Binding();
+            GroovyShell groovyShell = GroovySingleton.getSingleton();
+            Binding binding = groovyShell.getContext();
             for (Map.Entry<String, Object> entry : this.parserData.entrySet()) {
                 String fieldKey = entry.getKey();
                 Map<String, Object> data = (Map<String, Object>) entry.getValue();
@@ -206,13 +226,14 @@
                 binding.setProperty("system", systemData);
             }
 
-            GroovyShell shell = new GroovyShell(binding);
-            Object evaluate = shell.evaluate(group);
+//            GroovyShell shell = new GroovyShell(binding);
+            Object evaluate = groovyShell.evaluate(group);
             if (evaluate == null) {
                 targetData.put(group, "");
             } else {
                 targetData.put(group, evaluate.toString());
             }
+            groovyShell.getClassLoader().clearCache();
         }
 
         StringSubstitutor str = new StringSubstitutor(targetData);

--
Gitblit v1.9.1