This is an automated email from the ASF dual-hosted git repository.

mridulpathak pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 1027b9fe3c Remove the unused HTML menu and tree renderers
1027b9fe3c is described below

commit 1027b9fe3cfe51793c25e20e5be8b22e9a3a8c1d
Author: Mridul Pathak <[email protected]>
AuthorDate: Wed Oct 28 15:10:27 2026 +0530

    Remove the unused HTML menu and tree renderers
    
    The HtmlMenuWrapper family, HtmlMenuRenderer and HtmlTreeRenderer have had 
no callers since the widget renderers moved to FreeMarker macros. 
HtmlMenuWrapper loads classes from a package that no longer exists, and 
HtmlMenuWrapperImage throws a NullPointerException in its constructor, so the 
menuWrap FreeMarker transform built on them cannot work. The image subclasses 
and HtmlTreeRenderer have been deprecated since 2021. Remove them together with 
MenuWrapTransform and its registration,  [...]
---
 framework/base/config/cache.properties             |   1 -
 .../control/ExternalLoginKeysManagerTests.java     |   2 +-
 .../org/apache/ofbiz/widget/model/MenuFactory.java |  46 --
 .../org/apache/ofbiz/widget/model/ModelMenu.java   |  15 -
 .../ofbiz/widget/renderer/MenuWrapTransform.java   | 205 -------
 .../widget/renderer/html/HtmlMenuRenderer.java     | 595 ---------------------
 .../renderer/html/HtmlMenuRendererImage.java       |  86 ---
 .../widget/renderer/html/HtmlMenuWrapper.java      | 333 ------------
 .../widget/renderer/html/HtmlMenuWrapperImage.java |  78 ---
 .../widget/renderer/html/HtmlTreeRenderer.java     | 374 -------------
 .../ofbiz/widget/freemarkerTransforms.properties   |  24 -
 11 files changed, 1 insertion(+), 1758 deletions(-)

diff --git a/framework/base/config/cache.properties 
b/framework/base/config/cache.properties
index 55c1034dd1..624f73b6df 100644
--- a/framework/base/config/cache.properties
+++ b/framework/base/config/cache.properties
@@ -81,7 +81,6 @@ widget.grid.locationResource.expireTime=10000
 widget.grid.webappResource.expireTime=10000
 widget.menu.classResource.expireTime=10000
 widget.menu.locationResource.expireTime=10000
-widget.menu.webappResource.expireTime=10000
 widget.screen.locationResource.expireTime=10000
 widget.screen.webappResource.expireTime=10000
 widget.tree.locationResource.expireTime=10000
diff --git 
a/framework/webapp/src/test/java/org/apache/ofbiz/webapp/control/ExternalLoginKeysManagerTests.java
 
b/framework/webapp/src/test/java/org/apache/ofbiz/webapp/control/ExternalLoginKeysManagerTests.java
index c24f8bbfdd..c191534da1 100644
--- 
a/framework/webapp/src/test/java/org/apache/ofbiz/webapp/control/ExternalLoginKeysManagerTests.java
+++ 
b/framework/webapp/src/test/java/org/apache/ofbiz/webapp/control/ExternalLoginKeysManagerTests.java
@@ -216,7 +216,7 @@ public class ExternalLoginKeysManagerTests {
         when(mintRequest.getAttribute("userLogin")).thenReturn(userLogin);
         String key = ExternalLoginKeysManager.getExternalLoginKey(mintRequest);
 
-        // As WidgetWorker/HtmlTreeRenderer see it: a relative inter-app link 
target, not a
+        // As WidgetWorker sees it: a relative inter-app link target, not a
         // bare context path.
         ExternalLoginKeysManager.registerInterAppDestination(key, 
"/partymgr/control/viewprofile?partyId=10000");
 
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/MenuFactory.java 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/MenuFactory.java
index 47c0482099..cb680a547e 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/MenuFactory.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/MenuFactory.java
@@ -23,13 +23,10 @@ import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 
-import jakarta.servlet.ServletContext;
-import jakarta.servlet.http.HttpServletRequest;
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.ofbiz.base.location.FlexibleLocation;
 import org.apache.ofbiz.base.util.Debug;
-import org.apache.ofbiz.base.util.UtilHttp;
 import org.apache.ofbiz.base.util.UtilValidate;
 import org.apache.ofbiz.base.util.UtilXml;
 import org.apache.ofbiz.base.util.cache.UtilCache;
@@ -46,52 +43,9 @@ public class MenuFactory {
 
     private static final String MODULE = MenuFactory.class.getName();
 
-    public static final UtilCache<String, Map<String, ModelMenu>> 
MENU_WEBAPP_CACHE =
-            UtilCache.createUtilCache("widget.menu.webappResource", 0, 0, 
false);
     public static final UtilCache<String, Map<String, ModelMenu>> 
MENU_LOCATION_CACHE =
             UtilCache.createUtilCache("widget.menu.locationResource", 0, 0, 
false);
 
-    public static ModelMenu getMenuFromWebappContext(String resourceName, 
String menuName, HttpServletRequest request)
-            throws IOException, SAXException, ParserConfigurationException {
-        String webappName = UtilHttp.getApplicationName(request);
-        VisualTheme visualTheme = ThemeFactory.resolveVisualTheme(request);
-        String location = webappName + "::" + resourceName;
-        String cacheKey = location;
-
-        if (UtilValidate.isNotEmpty(visualTheme)) {
-            cacheKey += "::" + visualTheme.getVisualThemeId();
-        }
-
-        Map<String, ModelMenu> modelMenuMap = MENU_WEBAPP_CACHE.get(cacheKey);
-        if (modelMenuMap == null) {
-            ServletContext servletContext = request.getServletContext();
-
-            String sanitizedLocation = 
WidgetSecureLocation.sanitize(resourceName);
-            if (sanitizedLocation == null) {
-                Debug.logWarning("The location of menu [%s] isn't an allowed 
path. Abort rendering. Raw location [%s]",
-                        MODULE, menuName, resourceName);
-                throw new IllegalArgumentException("Abort menu rendering due 
to unallowed menu location");
-            }
-            URL menuFileUrl = servletContext.getResource(sanitizedLocation);
-            Document menuFileDoc = UtilXml.readXmlDocument(menuFileUrl, true, 
true);
-            modelMenuMap = readMenuDocument(menuFileDoc, location, 
visualTheme);
-            MENU_WEBAPP_CACHE.putIfAbsent(cacheKey, modelMenuMap);
-            modelMenuMap = MENU_WEBAPP_CACHE.get(cacheKey);
-        }
-
-        if (UtilValidate.isEmpty(modelMenuMap)) {
-            throw new IllegalArgumentException("Could not find menu file in 
webapp resource [" + resourceName + "] in the webapp ["
-                    + webappName + "]");
-        }
-
-        ModelMenu modelMenu = modelMenuMap.get(menuName);
-        if (modelMenu == null) {
-            throw new IllegalArgumentException("Could not find menu with name 
[" + menuName + "] in webapp resource [" + resourceName
-                    + "] in the webapp [" + webappName + "]");
-        }
-        return modelMenu;
-    }
-
     public static Map<String, ModelMenu> readMenuDocument(Document 
menuFileDoc, String menuLocation, VisualTheme visualTheme) {
         Map<String, ModelMenu> modelMenuMap = new HashMap<>();
         if (menuFileDoc != null) {
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelMenu.java 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelMenu.java
index cafe7f1b00..e267870550 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelMenu.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelMenu.java
@@ -655,21 +655,6 @@ public class ModelMenu extends ModelWidget {
         return this.type;
     }
 
-    /**
-     * Rendered menu item count int.
-     * @param context the context
-     * @return the int
-     */
-    public int renderedMenuItemCount(Map<String, Object> context) {
-        int count = 0;
-        for (ModelMenuItem item : this.menuItemList) {
-            if (item.shouldBeRendered(context)) {
-                count++;
-            }
-        }
-        return count;
-    }
-
     /**
      * Renders this menu to a String, i.e. in a text format, as defined with 
the MenuStringRenderer implementation.
      * @param writer The Writer that the menu text will be written to
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/MenuWrapTransform.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/MenuWrapTransform.java
deleted file mode 100644
index 2b689ba2af..0000000000
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/MenuWrapTransform.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- 
*******************************************************************************/
-package org.apache.ofbiz.widget.renderer;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.servlet.http.HttpSession;
-
-import org.apache.ofbiz.base.util.Debug;
-import org.apache.ofbiz.base.util.GeneralException;
-import org.apache.ofbiz.base.util.UtilGenerics;
-import org.apache.ofbiz.base.util.UtilValidate;
-import org.apache.ofbiz.base.util.template.FreeMarkerWorker;
-import org.apache.ofbiz.entity.Delegator;
-import org.apache.ofbiz.entity.GenericValue;
-import org.apache.ofbiz.webapp.ftl.LoopWriter;
-import org.apache.ofbiz.widget.content.WidgetContentWorker;
-import org.apache.ofbiz.widget.renderer.html.HtmlMenuWrapper;
-
-import freemarker.core.Environment;
-import freemarker.template.TemplateModelException;
-import freemarker.template.TemplateTransformModel;
-import freemarker.template.TransformControl;
-
-//import com.clarkware.profiler.Profiler;
-/**
- * MenuWrapTransform -  a FreeMarker transform that allow the ModelMenu
- * stuff to be used at the FM level. It can be used to add "function bars"
- * to pages.
- *
- * Accepts the following arguments (all of which can alternatively be present 
in the template context):
- * <ul>
- *   <li><code>List&lt;Map&lt;String, ? extends Object&gt;&gt; 
globalNodeTrail</code></li>
- *   <li><code>String contentAssocPredicateId</code></li>
- *   <li><code>String nullThruDatesOnly</code></li>
- *   <li><code>String subDataResourceTypeId</code></li>
- *   <li><code>String renderOnStart</code></li>
- *   <li><code>String renderOnClose</code></li>
- *   <li><code>String menuDefFile</code></li>
- *   <li><code>String menuName</code></li>
- *   <li><code>String menuWrapperClassName</code></li>
- *   <li><code>String associatedContentId</code></li>
- * </ul>
- *
- * This is an interactive FreeMarker transform that allows the user to modify 
the contents that are placed within it.
- */
-public class MenuWrapTransform implements TemplateTransformModel {
-
-    private static final String MODULE = MenuWrapTransform.class.getName();
-    public static final String[] UP_SAVE_KEY_NAMES = {"globalNodeTrail"};
-    public static final String[] SAVE_KEY_NAMES = {"contentId", 
"subContentId", "subDataResourceTypeId", "mimeTypeId", "whenMap", "locale",
-            "wrapTemplateId", "encloseWrapText", "nullThruDatesOnly", 
"renderOnStart", "renderOnClose", "menuDefFile", "menuName",
-            "associatedContentId", "wrapperClassName"};
-
-
-    @Override
-    @SuppressWarnings("rawtypes")
-    public Writer getWriter(final Writer out, Map args) {
-        final Environment env = Environment.getCurrentEnvironment();
-        final Delegator delegator = 
FreeMarkerWorker.getWrappedObject("delegator", env);
-        final HttpServletRequest request = 
FreeMarkerWorker.getWrappedObject("request", env);
-        final HttpServletResponse response = 
FreeMarkerWorker.getWrappedObject("response", env);
-        final HttpSession session = 
FreeMarkerWorker.getWrappedObject("session", env);
-
-        final GenericValue userLogin = 
FreeMarkerWorker.getWrappedObject("userLogin", env);
-        final Map<String, Object> templateCtx = 
FreeMarkerWorker.getWrappedObject("context", env);
-
-        FreeMarkerWorker.getSiteParameters(request, templateCtx);
-
-        final Map<String, Object> savedValuesUp = new HashMap<>();
-        FreeMarkerWorker.saveContextValues(templateCtx, UP_SAVE_KEY_NAMES, 
savedValuesUp);
-
-        Map<String, Object> checkedArgs = UtilGenerics.cast(args);
-        FreeMarkerWorker.overrideWithArgs(templateCtx, checkedArgs);
-        List<Map<String, ? extends Object>> trail = 
UtilGenerics.cast(templateCtx.get("globalNodeTrail"));
-        String contentAssocPredicateId = (String) 
templateCtx.get("contentAssocPredicateId");
-        String strNullThruDatesOnly = (String) 
templateCtx.get("nullThruDatesOnly");
-        Boolean nullThruDatesOnly = (strNullThruDatesOnly != null && 
"true".equalsIgnoreCase(strNullThruDatesOnly)) ? Boolean.TRUE : Boolean.FALSE;
-        GenericValue val = null;
-        try {
-            if (WidgetContentWorker.getContentWorker() != null) {
-                val = 
WidgetContentWorker.getContentWorker().getCurrentContentExt(delegator, trail, 
userLogin, templateCtx, nullThruDatesOnly,
-                        contentAssocPredicateId);
-            } else {
-                Debug.logError("Not rendering content, not ContentWorker 
found.", MODULE);
-            }
-        } catch (GeneralException e) {
-            throw new RuntimeException("Error getting current content. " + 
e.toString());
-        }
-        final GenericValue view = val;
-
-        String dataResourceId = null;
-        try {
-            dataResourceId = (String) view.get("drDataResourceId");
-        } catch (IllegalArgumentException e) {
-            dataResourceId = (String) view.get("dataResourceId");
-        }
-        String subContentIdSub = (String) view.get("contentId");
-        // This order is taken so that the dataResourceType can be overridden 
in the transform arguments.
-        String subDataResourceTypeId = (String) 
templateCtx.get("subDataResourceTypeId");
-        if (UtilValidate.isEmpty(subDataResourceTypeId)) {
-            try {
-                subDataResourceTypeId = (String) 
view.get("drDataResourceTypeId");
-            } catch (IllegalArgumentException e) {
-                // view may be "Content"
-            }
-            // TODO: If this value is still empty then it is probably 
necessary to get a value from
-            // the parent context. But it will already have one and it is the 
same context that is
-            // being passed.
-        }
-        // This order is taken so that the mimeType can be overridden in the 
transform arguments.
-        String mimeTypeId = null;
-        if (WidgetContentWorker.getContentWorker() != null) {
-            mimeTypeId = 
WidgetContentWorker.getContentWorker().getMimeTypeIdExt(delegator, view, 
templateCtx);
-        } else {
-            Debug.logError("Not rendering content, not ContentWorker found.", 
MODULE);
-        }
-        templateCtx.put("drDataResourceId", dataResourceId);
-        templateCtx.put("mimeTypeId", mimeTypeId);
-        templateCtx.put("dataResourceId", dataResourceId);
-        templateCtx.put("subContentIdSub", subContentIdSub);
-        templateCtx.put("subDataResourceTypeId", subDataResourceTypeId);
-        final Map<String, Object> savedValues = new HashMap<>();
-        FreeMarkerWorker.saveContextValues(templateCtx, SAVE_KEY_NAMES, 
savedValues);
-
-        final StringBuilder buf = new StringBuilder();
-
-        return new LoopWriter(out) {
-
-            @Override
-            public int onStart() throws TemplateModelException, IOException {
-                String renderOnStart = (String) 
templateCtx.get("renderOnStart");
-                if (renderOnStart != null && 
"true".equalsIgnoreCase(renderOnStart)) {
-                    renderMenu();
-                }
-                return TransformControl.EVALUATE_BODY;
-            }
-
-            @Override
-            public void write(char cbuf[], int off, int len) {
-                buf.append(cbuf, off, len);
-            }
-
-            @Override
-            public void flush() throws IOException {
-                out.flush();
-            }
-
-            @Override
-            public void close() throws IOException {
-                FreeMarkerWorker.reloadValues(templateCtx, savedValues, env);
-                String wrappedContent = buf.toString();
-                out.write(wrappedContent);
-                String renderOnClose = (String) 
templateCtx.get("renderOnClose");
-                if (renderOnClose == null || 
!"false".equalsIgnoreCase(renderOnClose)) {
-                    renderMenu();
-                }
-                FreeMarkerWorker.reloadValues(templateCtx, savedValuesUp, env);
-            }
-
-            public void renderMenu() throws IOException {
-
-                String menuDefFile = (String) templateCtx.get("menuDefFile");
-                String menuName = (String) templateCtx.get("menuName");
-                String menuWrapperClassName = (String) 
templateCtx.get("menuWrapperClassName");
-                HtmlMenuWrapper menuWrapper = 
HtmlMenuWrapper.getMenuWrapper(request, response, session, menuDefFile, 
menuName, menuWrapperClassName);
-
-                if (menuWrapper == null) {
-                    throw new IOException("HtmlMenuWrapper with def file:" + 
menuDefFile + " menuName:" + menuName + " and HtmlMenuWrapper class:"
-                            + menuWrapperClassName + " could not be 
instantiated.");
-                }
-
-                String associatedContentId = (String) 
templateCtx.get("associatedContentId");
-                menuWrapper.putInContext("defaultAssociatedContentId", 
associatedContentId);
-                menuWrapper.putInContext("currentValue", view);
-
-                String menuStr = menuWrapper.renderMenuString();
-                out.write(menuStr);
-            }
-
-        };
-    }
-}
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuRenderer.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuRenderer.java
deleted file mode 100644
index 1b1a29686d..0000000000
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuRenderer.java
+++ /dev/null
@@ -1,595 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- 
*******************************************************************************/
-package org.apache.ofbiz.widget.renderer.html;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.List;
-import java.util.Map;
-
-import jakarta.servlet.ServletContext;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.servlet.http.HttpSession;
-
-import org.apache.ofbiz.base.util.StringUtil;
-import org.apache.ofbiz.base.util.UtilCodec;
-import org.apache.ofbiz.base.util.UtilRandom;
-import org.apache.ofbiz.base.util.UtilValidate;
-import org.apache.ofbiz.entity.GenericValue;
-import org.apache.ofbiz.webapp.control.RequestHandler;
-import org.apache.ofbiz.webapp.taglib.ContentUrlTag;
-import org.apache.ofbiz.widget.WidgetWorker;
-import org.apache.ofbiz.widget.model.CommonWidgetModels.Image;
-import org.apache.ofbiz.widget.model.ModelMenu;
-import org.apache.ofbiz.widget.model.ModelMenuItem;
-import org.apache.ofbiz.widget.model.ModelMenuItem.MenuLink;
-import org.apache.ofbiz.widget.model.ModelWidget;
-import org.apache.ofbiz.widget.renderer.MenuStringRenderer;
-
-/**
- * Widget Library - HTML Menu Renderer implementation
- */
-public class HtmlMenuRenderer extends HtmlWidgetRenderer implements 
MenuStringRenderer {
-
-    private HttpServletRequest request;
-    private HttpServletResponse response;
-
-    /**
-     * Gets request.
-     * @return the request
-     */
-    public HttpServletRequest getRequest() {
-        return request;
-    }
-
-    /**
-     * Gets response.
-     * @return the response
-     */
-    public HttpServletResponse getResponse() {
-        return response;
-    }
-
-    private String userLoginIdAtPermGrant;
-    private String permissionErrorMessage = "";
-
-    protected static final String MODULE = HtmlMenuRenderer.class.getName();
-
-    protected HtmlMenuRenderer() { }
-
-    public HtmlMenuRenderer(HttpServletRequest request, HttpServletResponse 
response) {
-        this.request = request;
-        this.response = response;
-    }
-
-    /**
-     * Append ofbiz url.
-     * @param writer   the writer
-     * @param location the location
-     * @throws IOException the io exception
-     */
-    public void appendOfbizUrl(Appendable writer, String location) throws 
IOException {
-        ServletContext ctx = request.getServletContext();
-        if (ctx == null) {
-            HttpSession session = request.getSession();
-            if (session != null) {
-                ctx = session.getServletContext();
-            }
-            if (ctx == null) {
-                throw new RuntimeException("ctx is null. location:" + 
location);
-            }
-        }
-        RequestHandler rh = (RequestHandler) 
ctx.getAttribute("_REQUEST_HANDLER_");
-        // make and append the link
-        String s = rh.makeLink(this.request, this.response, location);
-        writer.append(s);
-    }
-
-    /**
-     * Append content url.
-     * @param writer   the writer
-     * @param location the location
-     * @throws IOException the io exception
-     */
-    public void appendContentUrl(Appendable writer, String location) throws 
IOException {
-        ServletContext ctx = request.getServletContext();
-        if (ctx == null) {
-            HttpSession session = request.getSession();
-            if (session != null) {
-                ctx = session.getServletContext();
-            }
-            if (ctx == null) {
-                throw new RuntimeException("ctx is null. location:" + 
location);
-            }
-            this.request.setAttribute("servletContext", ctx);
-        }
-        StringBuilder buffer = new StringBuilder();
-        ContentUrlTag.appendContentPrefix(this.request, buffer);
-        writer.append(buffer.toString());
-        writer.append(location);
-    }
-
-    /**
-     * Append tooltip.
-     * @param writer the writer
-     * @param context the context
-     * @param modelMenuItem the model menu item
-     * @throws IOException the io exception
-     */
-    public void appendTooltip(Appendable writer, Map<String, Object> context, 
ModelMenuItem modelMenuItem) throws IOException {
-        // render the tooltip
-        String tooltip = modelMenuItem.getTooltip(context);
-        if (UtilValidate.isNotEmpty(tooltip)) {
-            writer.append("<span class=\"");
-            String tooltipStyle = modelMenuItem.getTooltipStyle();
-            if (UtilValidate.isNotEmpty(tooltipStyle)) {
-                writer.append(tooltipStyle);
-            } else {
-                writer.append("tooltip");
-            }
-            writer.append("\"");
-            writer.append(tooltip);
-            writer.append("</span>");
-        }
-    }
-
-    @Override
-    public void renderFormatSimpleWrapperRows(Appendable writer, Map<String, 
Object> context, Object menuObj) throws IOException {
-        List<ModelMenuItem> menuItemList = ((ModelMenu) 
menuObj).getMenuItemList();
-        for (ModelMenuItem currentMenuItem: menuItemList) {
-            renderMenuItem(writer, context, currentMenuItem);
-        }
-    }
-
-    @Override
-    public void renderMenuItem(Appendable writer, Map<String, Object> context, 
ModelMenuItem menuItem) throws IOException {
-        boolean hideThisItem = isHideIfSelected(menuItem, context);
-
-        if (hideThisItem) {
-            return;
-        }
-
-        String style = menuItem.getWidgetStyle();
-
-        if (menuItem.isSelected(context)) {
-            style = menuItem.getSelectedStyle();
-            if (UtilValidate.isEmpty(style)) {
-                style = "selected";
-            }
-        }
-
-        if (this.isDisableIfEmpty(menuItem, context)) {
-            style = menuItem.getDisabledTitleStyle();
-        }
-
-        writer.append("  <li");
-        String alignStyle = menuItem.getAlignStyle();
-        if (UtilValidate.isNotEmpty(style) || 
UtilValidate.isNotEmpty(alignStyle)) {
-            writer.append(" class=\"");
-            if (UtilValidate.isNotEmpty(style)) {
-                writer.append(style).append(" ");
-            }
-            if (UtilValidate.isNotEmpty(alignStyle)) {
-                writer.append(alignStyle);
-            }
-            writer.append("\"");
-        }
-        String toolTip = menuItem.getTooltip(context);
-        if (UtilValidate.isNotEmpty(toolTip)) {
-            writer.append(" title=\"").append(toolTip).append("\"");
-        }
-        writer.append(">");
-
-        MenuLink link = menuItem.getLink();
-        if (link != null) {
-            renderLink(writer, context, link);
-        } else {
-            String txt = menuItem.getTitle(context);
-            UtilCodec.SimpleEncoder simpleEncoder = (UtilCodec.SimpleEncoder) 
context.get("simpleEncoder");
-            if (simpleEncoder != null) {
-                txt = simpleEncoder.encode(txt);
-            }
-            writer.append(txt);
-
-        }
-        if (!menuItem.getMenuItemList().isEmpty()) {
-            appendWhitespace(writer);
-            writer.append("    <ul>");
-            appendWhitespace(writer);
-            for (ModelMenuItem childMenuItem : menuItem.getMenuItemList()) {
-                childMenuItem.renderMenuItemString(writer, context, this);
-            }
-            writer.append("    </ul>");
-            appendWhitespace(writer);
-        }
-
-        writer.append("</li>");
-
-        appendWhitespace(writer);
-    }
-
-    /**
-     * Is disable if empty boolean.
-     * @param menuItem the menu item
-     * @param context the context
-     * @return the boolean
-     */
-    public boolean isDisableIfEmpty(ModelMenuItem menuItem, Map<String, 
Object> context) {
-        boolean disabled = false;
-        String disableIfEmpty = menuItem.getDisableIfEmpty();
-        if (UtilValidate.isNotEmpty(disableIfEmpty)) {
-            List<String> keys = StringUtil.split(disableIfEmpty, "|");
-            for (String key: keys) {
-                Object obj = context.get(key);
-                if (obj == null) {
-                    disabled = true;
-                    break;
-                }
-            }
-        }
-        return disabled;
-    }
-
-    @Override
-    public void renderMenuOpen(Appendable writer, Map<String, Object> context, 
ModelMenu modelMenu) throws IOException {
-
-        
this.setWidgetCommentsEnabled(ModelWidget.widgetBoundaryCommentsEnabled(context));
-        renderBeginningBoundaryComment(writer, "Menu Widget", modelMenu);
-        writer.append("<div");
-        String menuId = modelMenu.getId();
-        if (UtilValidate.isNotEmpty(menuId)) {
-            writer.append(" id=\"").append(menuId).append("\"");
-        } else {
-            // TODO: Remove else after UI refactor - allow both id and style
-            String menuContainerStyle = 
modelMenu.getMenuContainerStyle(context);
-            if (UtilValidate.isNotEmpty(menuContainerStyle)) {
-                writer.append(" 
class=\"").append(menuContainerStyle).append("\"");
-            }
-        }
-        String menuWidth = modelMenu.getMenuWidth();
-        // TODO: Eliminate embedded styling after refactor
-        if (UtilValidate.isNotEmpty(menuWidth)) {
-            writer.append(" style=\"width:").append(menuWidth).append(";\"");
-        }
-        writer.append(">");
-        appendWhitespace(writer);
-        String menuTitle = modelMenu.getTitle(context);
-        if (UtilValidate.isNotEmpty(menuTitle)) {
-            writer.append("<h2>").append(menuTitle).append("</h2>");
-            appendWhitespace(writer);
-        }
-        if (modelMenu.renderedMenuItemCount(context) > 0) {
-            writer.append("<ul>");
-            appendWhitespace(writer);
-            writer.append("<li>");
-            appendWhitespace(writer);
-            writer.append(" <ul>");
-            appendWhitespace(writer);
-        }
-    }
-
-    @Override
-    public void renderMenuClose(Appendable writer, Map<String, Object> 
context, ModelMenu modelMenu) throws IOException {
-        // TODO: div can't be directly inside an UL
-        String fillStyle = modelMenu.getFillStyle();
-        if (UtilValidate.isNotEmpty(fillStyle)) {
-            writer.append("<div 
class=\"").append(fillStyle).append("\">&nbsp;</div>");
-        }
-        if (modelMenu.renderedMenuItemCount(context) > 0) {
-            writer.append(" </ul>");
-            appendWhitespace(writer);
-            writer.append("</li>");
-            appendWhitespace(writer);
-            writer.append("</ul>");
-            appendWhitespace(writer);
-        }
-        writer.append(" <br class=\"clear\"/>");
-        appendWhitespace(writer);
-        writer.append("</div>");
-        appendWhitespace(writer);
-        renderEndingBoundaryComment(writer, "Menu Widget", modelMenu);
-
-        GenericValue userLogin = (GenericValue) 
request.getSession().getAttribute("userLogin");
-        if (userLogin != null) {
-            String userLoginId = userLogin.getString("userLoginId");
-            setUserLoginIdAtPermGrant(userLoginId);
-        } else {
-            request.getSession().setAttribute("userLoginIdAtPermGrant", null);
-        }
-    }
-
-    @Override
-    public void renderFormatSimpleWrapperOpen(Appendable writer, Map<String, 
Object> context, ModelMenu modelMenu) throws IOException {
-    }
-
-    @Override
-    public void renderFormatSimpleWrapperClose(Appendable writer, Map<String, 
Object> context, ModelMenu modelMenu) throws IOException {
-    }
-
-    /**
-     * Sets request.
-     * @param request the request
-     */
-    public void setRequest(HttpServletRequest request) {
-        this.request = request;
-    }
-
-    /**
-     * Sets response.
-     * @param response the response
-     */
-    public void setResponse(HttpServletResponse response) {
-        this.response = response;
-    }
-
-
-    /**
-     * @param string
-     */
-    public void setUserLoginIdAtPermGrant(String string) {
-        this.userLoginIdAtPermGrant = string;
-    }
-
-    /**
-     * Gets user login id at perm grant.
-     * @return the user login id at perm grant
-     */
-    public String getUserLoginIdAtPermGrant() {
-        return this.userLoginIdAtPermGrant;
-    }
-
-    /**
-     * Is hide if selected boolean.
-     * @param menuItem the menu item
-     * @param context  the context
-     * @return the boolean
-     */
-    public boolean isHideIfSelected(ModelMenuItem menuItem, Map<String, 
Object> context) {
-        ModelMenu menu = menuItem.getModelMenu();
-        String currentMenuItemName = 
menu.getSelectedMenuItemContextFieldName(context);
-        String currentItemName = menuItem.getName();
-        Boolean hideIfSelected = menuItem.getHideIfSelected();
-        return (hideIfSelected != null && hideIfSelected && 
currentMenuItemName != null && currentMenuItemName.equals(currentItemName));
-    }
-
-    /**
-     * User login id has changed boolean.
-     * @return the boolean
-     */
-    public boolean userLoginIdHasChanged() {
-        boolean hasChanged = false;
-        GenericValue userLogin = (GenericValue) 
request.getSession().getAttribute("userLogin");
-        userLoginIdAtPermGrant = getUserLoginIdAtPermGrant();
-        String userLoginId = null;
-        if (userLogin != null) {
-            userLoginId = userLogin.getString("userLoginId");
-        }
-        if ((userLoginId == null && userLoginIdAtPermGrant != null)
-                || (userLoginId != null && userLoginIdAtPermGrant == null)
-                || ((userLoginId != null && userLoginIdAtPermGrant != null)
-                && !userLoginId.equals(userLoginIdAtPermGrant))) {
-            hasChanged = true;
-        } else {
-            if (userLoginIdAtPermGrant != null) {
-                hasChanged = true;
-            } else {
-                hasChanged = false;
-            }
-
-            userLoginIdAtPermGrant = null;
-        }
-        return hasChanged;
-    }
-
-    /**
-     * Gets title.
-     * @param menuItem the menu item
-     * @param context the context
-     * @return the title
-     */
-    public String getTitle(ModelMenuItem menuItem, Map<String, Object> 
context) {
-        String title = null;
-        title = menuItem.getTitle(context);
-        return title;
-    }
-
-    @Override
-    public void renderLink(Appendable writer, Map<String, Object> context, 
ModelMenuItem.MenuLink link) throws IOException {
-        String target = link.getTarget(context);
-        ModelMenuItem menuItem = link.getLinkMenuItem();
-        if (isDisableIfEmpty(menuItem, context)) {
-            target = null;
-        }
-
-        if (UtilValidate.isNotEmpty(target)) {
-            HttpServletResponse response = (HttpServletResponse) 
context.get("response");
-            HttpServletRequest request = (HttpServletRequest) 
context.get("request");
-
-            String targetWindow = link.getTargetWindow(context);
-            String uniqueItemName = 
UtilRandom.getUnique(menuItem.getModelMenu().getName() + "_" + 
menuItem.getName() + "_", true);
-
-            String linkType = 
WidgetWorker.determineAutoLinkType(link.getLinkType(), target, 
link.getUrlMode(), request);
-            boolean isHiddenForm = "hidden-form".equals(linkType);
-            if (isHiddenForm) {
-                writer.append("<form method=\"post\"");
-                writer.append(" action=\"");
-                // note that this passes null for the parameterList on purpose 
so they won't be put into the URL
-                final URI uri = WidgetWorker.buildHyperlinkUri(target, 
link.getUrlMode(), null,
-                        link.getPrefix(context), link.getFullPath(), 
link.getSecure(), link.getEncode(),
-                        request, response);
-                writer.append(uri.toString());
-                writer.append("\"");
-
-                if (UtilValidate.isNotEmpty(targetWindow)) {
-                    writer.append(" target=\"");
-                    writer.append(targetWindow);
-                    writer.append("\"");
-                }
-
-                writer.append(" name=\"");
-                writer.append(uniqueItemName);
-                writer.append("\">");
-
-                UtilCodec.SimpleEncoder simpleEncoder = 
(UtilCodec.SimpleEncoder) context.get("simpleEncoder");
-                for (Map.Entry<String, String> parameter: 
link.getParameterMap(context, false).entrySet()) {
-                    writer.append("<input name=\"");
-                    writer.append(parameter.getKey());
-                    writer.append("\" value=\"");
-                    if (simpleEncoder != null) {
-                        
writer.append(simpleEncoder.encode(parameter.getValue()));
-                    } else {
-                        writer.append(parameter.getValue());
-                    }
-                    writer.append("\" type=\"hidden\"/>");
-                }
-
-                writer.append("</form>");
-            }
-
-            writer.append("<a");
-            String id = link.getId(context);
-            if (UtilValidate.isNotEmpty(id)) {
-                writer.append(" id=\"");
-                writer.append(id);
-                writer.append("\"");
-            }
-
-            String style = link.getStyle(context);
-            if (UtilValidate.isNotEmpty(style)) {
-                writer.append(" class=\"");
-                writer.append(style);
-                writer.append("\"");
-            }
-            String name = link.getName(context);
-            if (UtilValidate.isNotEmpty(name)) {
-                writer.append(" name=\"");
-                writer.append(name);
-                writer.append("\"");
-            }
-            if (!isHiddenForm) {
-                if (UtilValidate.isNotEmpty(targetWindow)) {
-                    writer.append(" target=\"");
-                    writer.append(targetWindow);
-                    writer.append("\"");
-                }
-            }
-
-            writer.append(" href=\"");
-            if (isHiddenForm) {
-                writer.append("javascript:document.");
-                writer.append(uniqueItemName);
-                writer.append(".submit()");
-            } else {
-                final URI uri = WidgetWorker.buildHyperlinkUri(target, 
link.getUrlMode(), link.getParameterMap(context),
-                        link.getPrefix(context), link.getFullPath(), 
link.getSecure(), link.getEncode(),
-                        request, response);
-                writer.append(uri.toString());
-            }
-            writer.append("\">");
-        }
-
-        // the text
-        Image img = link.getImage();
-        if (img != null) {
-            renderImage(writer, context, img);
-            writer.append("&nbsp;" + link.getText(context));
-        } else {
-            writer.append(link.getText(context));
-        }
-
-        if (UtilValidate.isNotEmpty(target)) {
-            // close tag
-            writer.append("</a>");
-        }
-
-    }
-
-    @Override
-    public void renderImage(Appendable writer, Map<String, Object> context, 
Image image) throws IOException {
-        // open tag
-        writer.append("<img ");
-        String id = image.getId(context);
-        if (UtilValidate.isNotEmpty(id)) {
-            writer.append(" id=\"");
-            writer.append(id);
-            writer.append("\"");
-        }
-        String style = image.getStyle(context);
-        if (UtilValidate.isNotEmpty(style)) {
-            writer.append(" class=\"");
-            writer.append(style);
-            writer.append("\"");
-        }
-        String wid = image.getWidth(context);
-        if (UtilValidate.isNotEmpty(wid)) {
-            writer.append(" width=\"");
-            writer.append(wid);
-            writer.append("\"");
-        }
-        String hgt = image.getHeight(context);
-        if (UtilValidate.isNotEmpty(hgt)) {
-            writer.append(" height=\"");
-            writer.append(hgt);
-            writer.append("\"");
-        }
-        String border = image.getBorder(context);
-        if (UtilValidate.isNotEmpty(border)) {
-            writer.append(" border=\"");
-            writer.append(border);
-            writer.append("\"");
-        }
-        String src = image.getSrc(context);
-        if (UtilValidate.isNotEmpty(src)) {
-            writer.append(" src=\"");
-            String urlMode = image.getUrlMode();
-            boolean fullPath = false;
-            boolean secure = false;
-            boolean encode = false;
-            HttpServletResponse response = (HttpServletResponse) 
context.get("response");
-            HttpServletRequest request = (HttpServletRequest) 
context.get("request");
-            String urlString = "";
-            if (urlMode != null && "ofbiz".equalsIgnoreCase(urlMode)) {
-                if (request != null && response != null) {
-                    RequestHandler rh = (RequestHandler) 
request.getServletContext().getAttribute("_REQUEST_HANDLER_");
-                    urlString = rh.makeLink(request, response, src, fullPath, 
secure, encode);
-                } else {
-                    urlString = src;
-                }
-            } else if (urlMode != null && "content".equalsIgnoreCase(urlMode)) 
{
-                if (request != null && response != null) {
-                    StringBuilder newURL = new StringBuilder();
-                    ContentUrlTag.appendContentPrefix(request, newURL);
-                    newURL.append(src);
-                    urlString = newURL.toString();
-                }
-            } else {
-                urlString = src;
-            }
-            UtilCodec.SimpleEncoder simpleEncoder = (UtilCodec.SimpleEncoder) 
context.get("simpleEncoder");
-            if (simpleEncoder != null) {
-                urlString = simpleEncoder.encode(urlString);
-            }
-            writer.append(urlString);
-
-            writer.append("\"");
-        }
-        writer.append("/>");
-    }
-}
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuRendererImage.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuRendererImage.java
deleted file mode 100644
index cf16cf7f90..0000000000
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuRendererImage.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- 
*******************************************************************************/
-package org.apache.ofbiz.widget.renderer.html;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Map;
-
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import org.apache.ofbiz.base.util.Debug;
-import org.apache.ofbiz.base.util.UtilValidate;
-import org.apache.ofbiz.entity.Delegator;
-import org.apache.ofbiz.entity.GenericEntityException;
-import org.apache.ofbiz.entity.GenericValue;
-import org.apache.ofbiz.widget.content.WidgetContentWorker;
-import org.apache.ofbiz.widget.model.ModelMenuItem;
-
-/**
- * Widget Library - HTML Menu Renderer implementation
- *
- * @deprecated since 2021-01-14
- */
-@Deprecated
-public class HtmlMenuRendererImage extends HtmlMenuRenderer {
-
-    protected HtmlMenuRendererImage() { }
-
-    public HtmlMenuRendererImage(HttpServletRequest request, 
HttpServletResponse response) {
-        super(request, response);
-    }
-
-    /**
-     * Build div str string.
-     * @param menuItem the menu item
-     * @param context  the context
-     * @return the string
-     * @throws IOException the io exception
-     */
-    public String buildDivStr(ModelMenuItem menuItem, Map<String, Object> 
context) throws IOException {
-
-        StringBuilder imgStr = new StringBuilder("<img src=\"");
-        String contentId = menuItem.getAssociatedContentId(context);
-        Delegator delegator = (Delegator) 
getRequest().getAttribute("delegator");
-        GenericValue webSitePublishPoint = null;
-        try {
-            if (WidgetContentWorker.getContentWorker() != null) {
-                webSitePublishPoint = 
WidgetContentWorker.getContentWorker().getWebSitePublishPointExt(delegator, 
contentId, false);
-            } else {
-                Debug.logError("Not rendering image because can't get 
WebSitePublishPoint, not ContentWorker found.", MODULE);
-            }
-        } catch (GenericEntityException e) {
-            throw new RuntimeException(e.getMessage());
-        }
-        String medallionLogoStr = 
webSitePublishPoint.getString("medallionLogo");
-        StringWriter buf = new StringWriter();
-        appendContentUrl(buf, medallionLogoStr);
-        imgStr.append(buf.toString());
-        String cellWidth = menuItem.getCellWidth();
-        imgStr.append("\"");
-        if (UtilValidate.isNotEmpty(cellWidth)) {
-            imgStr.append(" width=\"").append(cellWidth).append("\" ");
-        }
-
-        imgStr.append(" border=\"0\" />");
-        return imgStr.toString();
-    }
-
-}
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuWrapper.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuWrapper.java
deleted file mode 100644
index d08516557d..0000000000
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuWrapper.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- 
*******************************************************************************/
-package org.apache.ofbiz.widget.renderer.html;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Map;
-
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.servlet.http.HttpSession;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.ofbiz.base.util.Debug;
-import org.apache.ofbiz.base.util.UtilGenerics;
-import org.apache.ofbiz.base.util.UtilHttp;
-import org.apache.ofbiz.base.util.UtilValidate;
-import org.apache.ofbiz.entity.GenericValue;
-import org.apache.ofbiz.widget.model.MenuFactory;
-import org.apache.ofbiz.widget.model.ModelMenu;
-import org.apache.ofbiz.widget.renderer.MenuStringRenderer;
-import org.xml.sax.SAXException;
-
-
-/**
- * Widget Library - HTML Menu Wrapper class - makes it easy to do the setup 
and render of a menu
- */
-public class HtmlMenuWrapper {
-
-    private static final String MODULE = HtmlMenuWrapper.class.getName();
-
-    private String resourceName;
-    private String menuName;
-    private HttpServletRequest request;
-    private HttpServletResponse response;
-    private ModelMenu modelMenu;
-    private MenuStringRenderer renderer;
-    private Map<String, Object> context;
-
-    protected HtmlMenuWrapper() { }
-
-    public HtmlMenuWrapper(String resourceName, String menuName, 
HttpServletRequest request, HttpServletResponse response)
-            throws IOException, SAXException, ParserConfigurationException {
-        init(resourceName, menuName, request, response);
-    }
-
-    /**
-     * Init.
-     * @param resourceName the resource name
-     * @param menuName the menu name
-     * @param request the request
-     * @param response the response
-     * @throws IOException the io exception
-     * @throws SAXException the sax exception
-     * @throws ParserConfigurationException the parser configuration exception
-     */
-    public void init(String resourceName, String menuName, HttpServletRequest 
request, HttpServletResponse response)
-            throws IOException, SAXException, ParserConfigurationException {
-        this.resourceName = resourceName;
-        this.menuName = menuName;
-        this.request = request;
-        this.response = response;
-
-        this.modelMenu = MenuFactory.getMenuFromWebappContext(resourceName, 
menuName, request);
-
-        this.renderer = getMenuRenderer();
-
-        this.context = new HashMap<>();
-        Map<String, Object> parameterMap = UtilHttp.getParameterMap(request);
-        context.put("parameters", parameterMap);
-
-        HttpSession session = request.getSession();
-        GenericValue userLogin = (GenericValue) 
session.getAttribute("userLogin");
-        context.put("userLogin", userLogin);
-
-        //make sure the locale is in the context
-        context.put("locale", UtilHttp.getLocale(request));
-
-        // if there was an error message, this is an error
-        if (UtilValidate.isNotEmpty(request.getAttribute("_ERROR_MESSAGE_"))) {
-            context.put("isError", Boolean.TRUE);
-        } else {
-            context.put("isError", Boolean.FALSE);
-        }
-
-        // if a parameter was passed saying this is an error, it is an error
-        if ("true".equals(parameterMap.get("isError"))) {
-            context.put("isError", Boolean.TRUE);
-        }
-    }
-
-    /**
-     * Gets menu renderer.
-     * @return the menu renderer
-     */
-    public MenuStringRenderer getMenuRenderer() {
-        return new HtmlMenuRenderer(request, response);
-    }
-
-    /**
-     * Render menu string string.
-     * @return the string
-     * @throws IOException the io exception
-     */
-    public String renderMenuString() throws IOException {
-        HttpServletRequest req = ((HtmlMenuRenderer) renderer).getRequest();
-        if (req.getServletContext() == null) {
-            if (Debug.infoOn()) {
-                Debug.logInfo("in renderMenuString, ctx is null(0)", "");
-            }
-        }
-
-        Writer writer = new StringWriter();
-        modelMenu.renderMenuString(writer, context, renderer);
-
-        HttpServletRequest req2 = ((HtmlMenuRenderer) renderer).getRequest();
-        if (req2.getServletContext() == null) {
-            if (Debug.infoOn()) {
-                Debug.logInfo("in renderMenuString, ctx is null(2)", "");
-            }
-        }
-
-        return writer.toString();
-    }
-
-    /**
-     * Tells the menu library whether this is a response to an error or not.
-     * Defaults on initialization according to the presense of an errorMessage
-     * in the request or if an isError parameter was passed to the page with
-     * the value "true". If true then the prefilled values will come from the
-     * parameters Map instead of the value Map.
-     */
-    public void setIsError(boolean isError) {
-        this.context.put("isError", isError);
-    }
-
-    /**
-     * Gets is error.
-     * @return the is error
-     */
-    public boolean getIsError() {
-        Boolean isErrorBoolean = (Boolean) this.context.get("isError");
-        if (isErrorBoolean == null) {
-            return false;
-        } else {
-            return isErrorBoolean;
-        }
-    }
-
-    /**
-     * Sets menu override name.
-     * @param menuName the menu name
-     */
-    public void setMenuOverrideName(String menuName) {
-        this.context.put("menuName", menuName);
-    }
-
-    /**
-     * Put in context.
-     * @param name  the name
-     * @param value the value
-     */
-    public void putInContext(String name, Object value) {
-        this.context.put(name, value);
-    }
-
-    /**
-     * Put in context.
-     * @param menuItemName the menu item name
-     * @param valueName    the value name
-     * @param value        the value
-     */
-    public void putInContext(String menuItemName, String valueName, Object 
value) {
-        Object obj = context.get(menuItemName);
-        Map<String, Object> valueMap = (obj instanceof Map) ? 
UtilGenerics.cast(obj) : null;
-        if (valueMap == null) {
-            valueMap = new HashMap<>();
-            context.put(menuItemName, valueMap);
-        }
-        valueMap.put(valueName, value);
-    }
-
-    /**
-     * Gets from context.
-     * @param name the name
-     * @return the from context
-     */
-    public Object getFromContext(String name) {
-        return this.context.get(name);
-    }
-
-    /**
-     * Gets from context.
-     * @param menuItemName the menu item name
-     * @param valueName    the value name
-     * @return the from context
-     */
-    public Object getFromContext(String menuItemName, String valueName) {
-        Object obj = context.get(menuItemName);
-        Map<String, Object> valueMap = (obj instanceof Map) ? 
UtilGenerics.cast(obj) : null;
-        if (valueMap == null) {
-            valueMap = new HashMap<>();
-            context.put(menuItemName, valueMap);
-        }
-        return valueMap.get(valueName);
-    }
-
-    /**
-     * Gets model menu.
-     * @return the model menu
-     */
-    public ModelMenu getModelMenu() {
-        return modelMenu;
-    }
-
-    /**
-     * Gets renderer.
-     * @return the renderer
-     */
-    public MenuStringRenderer getRenderer() {
-        return renderer;
-    }
-
-    /**
-     * Sets renderer.
-     * @param renderer the renderer
-     */
-    public void setRenderer(MenuStringRenderer renderer) {
-        this.renderer = renderer;
-    }
-
-    /**
-     * Sets request.
-     * @param request the request
-     */
-    public void setRequest(HttpServletRequest request) {
-        this.request = request;
-        // CHECKSTYLE_OFF: ALMOST_ALL
-        ((HtmlMenuRenderer) renderer).setRequest(request);
-        // CHECKSTYLE_ON: ALMOST_ALL
-    }
-
-    /**
-     * Sets response.
-     * @param response the response
-     */
-    public void setResponse(HttpServletResponse response) {
-        this.response = response;
-        // CHECKSTYLE_OFF: ALMOST_ALL
-        ((HtmlMenuRenderer) renderer).setResponse(response);
-        // CHECKSTYLE_ON: ALMOST_ALL
-    }
-
-    /**
-     * Gets request.
-     * @return the request
-     */
-    public HttpServletRequest getRequest() {
-        return ((HtmlMenuRenderer) renderer).getRequest();
-    }
-
-    /**
-     * Gets response.
-     * @return the response
-     */
-    public HttpServletResponse getResponse() {
-        return ((HtmlMenuRenderer) renderer).getResponse();
-    }
-
-    public static HtmlMenuWrapper getMenuWrapper(HttpServletRequest request, 
HttpServletResponse response, HttpSession session,
-                                                 String menuDefFile, String 
menuName, String menuWrapperClassName) {
-
-        HtmlMenuWrapper menuWrapper = null;
-
-        String menuSig = menuDefFile + "__" + menuName;
-        if (session != null) {
-            menuWrapper = (HtmlMenuWrapper) session.getAttribute(menuSig);
-        }
-
-        if (menuWrapper == null) {
-            try {
-                Class<?> cls = Class.forName("org.apache.ofbiz.widget.html." + 
menuWrapperClassName);
-                menuWrapper = (HtmlMenuWrapper) 
cls.getDeclaredConstructor().newInstance();
-                menuWrapper.init(menuDefFile, menuName, request, response);
-            } catch (InstantiationException | IllegalAccessException | 
IOException | SAXException | ParserConfigurationException e) {
-                throw new RuntimeException(e.getMessage());
-            } catch (ReflectiveOperationException e) {
-                throw new RuntimeException("Class not found:" + 
e.getMessage());
-            }
-        } else {
-            menuWrapper.setRequest(request);
-            menuWrapper.setResponse(response);
-            Map<String, Object> parameterMap = 
UtilHttp.getParameterMap(request);
-            menuWrapper.setParameters(parameterMap);
-
-            GenericValue userLogin = (GenericValue) 
session.getAttribute("userLogin");
-            menuWrapper.putInContext("userLogin", userLogin);
-
-        }
-
-        if (session != null) {
-            session.setAttribute(menuSig, menuWrapper);
-        }
-        return menuWrapper;
-    }
-
-    /**
-     * Sets parameters.
-     * @param paramMap the param map
-     */
-    public void setParameters(Map<String, Object> paramMap) {
-        context.put("parameters", paramMap);
-    }
-
-}
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuWrapperImage.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuWrapperImage.java
deleted file mode 100644
index 117f6db506..0000000000
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlMenuWrapperImage.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- 
*******************************************************************************/
-package org.apache.ofbiz.widget.renderer.html;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.ofbiz.entity.Delegator;
-import org.apache.ofbiz.entity.GenericEntityException;
-import org.apache.ofbiz.entity.GenericValue;
-import org.apache.ofbiz.entity.util.EntityQuery;
-import org.apache.ofbiz.widget.model.ModelMenuItem;
-import org.apache.ofbiz.widget.renderer.MenuStringRenderer;
-import org.xml.sax.SAXException;
-
-/**
- * Widget Library - HTML Menu Wrapper class - makes it easy to do the setup 
and render of a menu
- *
- * @deprecated since 2021-01-14
- */
-@Deprecated
-public class HtmlMenuWrapperImage extends HtmlMenuWrapper {
-
-    private static final String MODULE = HtmlMenuWrapperImage.class.getName();
-
-    protected HtmlMenuWrapperImage() { }
-
-    public HtmlMenuWrapperImage(String resourceName, String menuName, 
HttpServletRequest request, HttpServletResponse response)
-            throws IOException, SAXException, ParserConfigurationException {
-        super(resourceName, menuName, request, response);
-    }
-
-    @Override
-    public MenuStringRenderer getMenuRenderer() {
-        return new HtmlMenuRendererImage(getRequest(), getResponse());
-    }
-
-    @Override
-    public void init(String resourceName, String menuName, HttpServletRequest 
request, HttpServletResponse response)
-            throws IOException, SAXException, ParserConfigurationException {
-
-        super.init(resourceName, menuName, request, response);
-        Map<String, Object> dummyMap = new HashMap<>();
-        Delegator delegator = (Delegator) request.getAttribute("delegator");
-        try {
-            for (ModelMenuItem menuItem : getModelMenu().getMenuItemList()) {
-                String contentId = menuItem.getAssociatedContentId(dummyMap);
-                GenericValue webSitePublishPoint =
-                        
EntityQuery.use(delegator).from("WebSitePublishPoint").where("contentId", 
contentId).cache().queryOne();
-                String menuItemName = menuItem.getName();
-                putInContext(menuItemName, "WebSitePublishPoint", 
webSitePublishPoint);
-            }
-        } catch (GenericEntityException e) {
-            return;
-        }
-    }
-}
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlTreeRenderer.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlTreeRenderer.java
deleted file mode 100644
index 60b73b5565..0000000000
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlTreeRenderer.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- 
*******************************************************************************/
-package org.apache.ofbiz.widget.renderer.html;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.List;
-import java.util.Map;
-
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import org.apache.ofbiz.base.util.Debug;
-import org.apache.ofbiz.base.util.StringUtil;
-import org.apache.ofbiz.base.util.UtilCodec;
-import org.apache.ofbiz.base.util.UtilGenerics;
-import org.apache.ofbiz.base.util.UtilValidate;
-import org.apache.ofbiz.webapp.control.ExternalLoginKeysManager;
-import org.apache.ofbiz.webapp.control.RequestHandler;
-import org.apache.ofbiz.webapp.taglib.ContentUrlTag;
-import org.apache.ofbiz.widget.WidgetWorker;
-import org.apache.ofbiz.widget.model.ModelTheme;
-import org.apache.ofbiz.widget.model.ModelTree;
-import org.apache.ofbiz.widget.model.ModelWidget;
-import org.apache.ofbiz.widget.renderer.ScreenRenderer;
-import org.apache.ofbiz.widget.renderer.ScreenStringRenderer;
-import org.apache.ofbiz.widget.renderer.TreeStringRenderer;
-import org.apache.ofbiz.widget.renderer.VisualTheme;
-import org.apache.ofbiz.widget.renderer.macro.MacroScreenRenderer;
-
-import freemarker.template.TemplateException;
-
-
-/**
- * Widget Library - HTML Tree Renderer implementation
- *
- * @deprecated since 2021-01-14
- */
-@Deprecated
-public class HtmlTreeRenderer extends HtmlWidgetRenderer implements 
TreeStringRenderer {
-
-    private ScreenStringRenderer screenStringRenderer = null;
-    private static final String MODULE = HtmlTreeRenderer.class.getName();
-
-    public HtmlTreeRenderer() { }
-
-    @Override
-    public void renderNodeBegin(Appendable writer, Map<String, Object> 
context, ModelTree.ModelNode node, int depth) throws IOException {
-        String currentNodeTrailPiped = null;
-        Object obj = context.get("currentNodeTrail");
-        List<String> currentNodeTrail = (obj instanceof List) ? 
UtilGenerics.cast(obj) : null;
-        if (node.isRootNode()) {
-            appendWhitespace(writer);
-            
this.setWidgetCommentsEnabled(ModelWidget.widgetBoundaryCommentsEnabled(context));
-            renderBeginningBoundaryComment(writer, "Tree Widget", 
node.getModelTree());
-            writer.append("<ul class=\"basic-tree\">");
-        }
-        appendWhitespace(writer);
-        writer.append("<li>");
-
-        String pkName = node.getPkName(context);
-        String entityId = null;
-        String entryName = node.getEntryName();
-        if (UtilValidate.isNotEmpty(entryName)) {
-            entityId = UtilGenerics.<Map<String, 
String>>cast(context.get(entryName)).get(pkName);
-        } else {
-            entityId = (String) context.get(pkName);
-        }
-        boolean hasChildren = node.hasChildren(context);
-
-        // check to see if this node needs to be expanded.
-        if (hasChildren && node.isExpandCollapse()) {
-            String targetEntityId = null;
-            Object obj1 = context.get("targetNodeTrail");
-            List<String> targetNodeTrail = (obj1 instanceof List) ? 
UtilGenerics.cast(obj1) : null;
-            if (targetNodeTrail != null && depth < targetNodeTrail.size()) {
-                targetEntityId = targetNodeTrail.get(depth);
-            }
-            // FIXME: Using a widget model in this way is an ugly hack.
-            ModelTree.ModelNode.Link expandCollapseLink = null;
-            int openDepth = node.getModelTree().getOpenDepth();
-            if (depth >= openDepth && (targetEntityId == null || 
!targetEntityId.equals(entityId))) {
-                // Not on the trail
-                if (node.showPeers(depth, context)) {
-                    context.put("processChildren", Boolean.FALSE);
-                    currentNodeTrailPiped = StringUtil.join(currentNodeTrail, 
"|");
-                    StringBuilder target = new 
StringBuilder(node.getModelTree().getExpandCollapseRequest(context));
-                    String trailName = 
node.getModelTree().getTrailName(context);
-                    if (target.indexOf("?") < 0) {
-                        target.append("?");
-                    } else {
-                        target.append("&");
-                    }
-                    
target.append(trailName).append("=").append(currentNodeTrailPiped);
-                    expandCollapseLink = new 
ModelTree.ModelNode.Link("collapsed", target.toString(), " ");
-                }
-            } else {
-                context.put("processChildren", Boolean.TRUE);
-                String lastContentId = 
currentNodeTrail.remove(currentNodeTrail.size() - 1);
-                currentNodeTrailPiped = StringUtil.join(currentNodeTrail, "|");
-                if (currentNodeTrailPiped == null) {
-                    currentNodeTrailPiped = "";
-                }
-                StringBuilder target = new 
StringBuilder(node.getModelTree().getExpandCollapseRequest(context));
-                String trailName = node.getModelTree().getTrailName(context);
-                if (target.indexOf("?") < 0) {
-                    target.append("?");
-                } else {
-                    target.append("&");
-                }
-                
target.append(trailName).append("=").append(currentNodeTrailPiped);
-                expandCollapseLink = new ModelTree.ModelNode.Link("expanded", 
target.toString(), " ");
-                // add it so it can be remove in renderNodeEnd
-                currentNodeTrail.add(lastContentId);
-            }
-            if (expandCollapseLink != null) {
-                renderLink(writer, context, expandCollapseLink);
-            }
-        } else if (!hasChildren) {
-            context.put("processChildren", Boolean.FALSE);
-            ModelTree.ModelNode.Link expandCollapseLink = new 
ModelTree.ModelNode.Link("leafnode", "", " ");
-            renderLink(writer, context, expandCollapseLink);
-        }
-    }
-
-    @Override
-    public void renderNodeEnd(Appendable writer, Map<String, Object> context, 
ModelTree.ModelNode node) throws IOException {
-        Boolean processChildren = (Boolean) context.get("processChildren");
-        if (processChildren) {
-            appendWhitespace(writer);
-            writer.append("</ul>");
-        }
-        appendWhitespace(writer);
-        writer.append("</li>");
-        if (node.isRootNode()) {
-            appendWhitespace(writer);
-            writer.append("</ul>");
-            appendWhitespace(writer);
-            renderEndingBoundaryComment(writer, "Tree Widget", 
node.getModelTree());
-        }
-    }
-
-    @Override
-    public void renderLastElement(Appendable writer, Map<String, Object> 
context, ModelTree.ModelNode node) throws IOException {
-        Boolean processChildren = (Boolean) context.get("processChildren");
-        if (processChildren) {
-            appendWhitespace(writer);
-            writer.append("<ul class=\"basic-tree\">");
-        }
-    }
-
-    @Override
-    public void renderLabel(Appendable writer, Map<String, Object> context, 
ModelTree.ModelNode.Label label) throws IOException {
-        // open tag
-        writer.append("<span");
-        String id = label.getId(context);
-        if (UtilValidate.isNotEmpty(id)) {
-            writer.append(" id=\"");
-            writer.append(id);
-            writer.append("\"");
-        }
-        String style = label.getStyle(context);
-        if (UtilValidate.isNotEmpty(style)) {
-            writer.append(" class=\"");
-            writer.append(style);
-            writer.append("\"");
-        }
-        writer.append(">");
-
-        // the text
-        writer.append(label.getText(context));
-
-        // close tag
-        writer.append("</span>");
-
-        appendWhitespace(writer);
-    }
-
-
-    @Override
-    public void renderLink(Appendable writer, Map<String, Object> context, 
ModelTree.ModelNode.Link link) throws IOException {
-        // open tag
-        writer.append("<a");
-        String id = link.getId(context);
-        if (UtilValidate.isNotEmpty(id)) {
-            writer.append(" id=\"");
-            writer.append(id);
-            writer.append("\"");
-        }
-        String style = link.getStyle(context);
-        if (UtilValidate.isNotEmpty(style)) {
-            writer.append(" class=\"");
-            writer.append(style);
-            writer.append("\"");
-        }
-        String name = link.getName(context);
-        if (UtilValidate.isNotEmpty(name)) {
-            writer.append(" name=\"");
-            writer.append(name);
-            writer.append("\"");
-        }
-        String title = link.getTitle(context);
-        if (UtilValidate.isNotEmpty(title)) {
-            writer.append(" title=\"");
-            writer.append(title);
-            writer.append("\"");
-        }
-        String targetWindow = link.getTargetWindow(context);
-        if (UtilValidate.isNotEmpty(targetWindow)) {
-            writer.append(" target=\"");
-            writer.append(targetWindow);
-            writer.append("\"");
-        }
-        String target = link.getTarget(context);
-        if (UtilValidate.isNotEmpty(target)) {
-            writer.append(" href=\"");
-            String urlMode = link.getUrlMode();
-            String prefix = link.getPrefix(context);
-            HttpServletResponse res = (HttpServletResponse) 
context.get("response");
-            HttpServletRequest req = (HttpServletRequest) 
context.get("request");
-            if (urlMode != null && "intra-app".equalsIgnoreCase(urlMode)) {
-                if (req != null && res != null) {
-                    final URI uri = WidgetWorker.buildHyperlinkUri(target, 
link.getUrlMode(),
-                            link.getParameterMap(context), 
link.getPrefix(context), link.getFullPath(),
-                            link.getSecure(), link.getEncode(), req, res);
-                    writer.append(uri.toString());
-                } else if (prefix != null) {
-                    writer.append(prefix).append(target);
-                } else {
-                    writer.append(target);
-                }
-            } else if (urlMode != null && "content".equalsIgnoreCase(urlMode)) 
{
-                StringBuilder newURL = new StringBuilder();
-                ContentUrlTag.appendContentPrefix(req, newURL);
-                newURL.append(target);
-                writer.append(newURL.toString());
-            } else if ("inter-app".equalsIgnoreCase(urlMode) && req != null) {
-                writer.append(target);
-                String externalLoginKey = (String) 
req.getAttribute("externalLoginKey");
-                // Never attach the credential to a target that can point at 
another host.
-                if (UtilValidate.isNotEmpty(externalLoginKey) && 
!WidgetWorker.isAbsoluteTarget(target)) {
-                    if (target.contains("?")) {
-                        writer.append("&externalLoginKey=");
-                    } else {
-                        writer.append("?externalLoginKey=");
-                    }
-                    writer.append(externalLoginKey);
-                    
ExternalLoginKeysManager.registerInterAppDestination(externalLoginKey, target);
-                }
-            } else {
-                writer.append(target);
-            }
-            writer.append("\"");
-        }
-        writer.append(">");
-
-        // the text
-        ModelTree.ModelNode.Image img = link.getImage();
-        if (img == null) {
-            writer.append(link.getText(context));
-        } else {
-            renderImage(writer, context, img);
-        }
-        // close tag
-        writer.append("</a>");
-    }
-
-    @Override
-    public void renderImage(Appendable writer, Map<String, Object> context, 
ModelTree.ModelNode.Image image) throws IOException {
-        // open tag
-        writer.append("<img ");
-        String id = image.getId(context);
-        if (UtilValidate.isNotEmpty(id)) {
-            writer.append(" id=\"");
-            writer.append(id);
-            writer.append("\"");
-        }
-        String style = image.getStyle(context);
-        if (UtilValidate.isNotEmpty(style)) {
-            writer.append(" class=\"");
-            writer.append(style);
-            writer.append("\"");
-        }
-        String wid = image.getWidth(context);
-        if (UtilValidate.isNotEmpty(wid)) {
-            writer.append(" width=\"");
-            writer.append(wid);
-            writer.append("\"");
-        }
-        String hgt = image.getHeight(context);
-        if (UtilValidate.isNotEmpty(hgt)) {
-            writer.append(" height=\"");
-            writer.append(hgt);
-            writer.append("\"");
-        }
-        String border = image.getBorder(context);
-        if (UtilValidate.isNotEmpty(border)) {
-            writer.append(" border=\"");
-            writer.append(border);
-            writer.append("\"");
-        }
-        String src = image.getSrc(context);
-        if (UtilValidate.isNotEmpty(src)) {
-            writer.append(" src=\"");
-            String urlMode = image.getUrlMode();
-            boolean fullPath = false;
-            boolean secure = false;
-            boolean encode = false;
-            HttpServletResponse response = (HttpServletResponse) 
context.get("response");
-            HttpServletRequest request = (HttpServletRequest) 
context.get("request");
-            String urlString = "";
-            if (urlMode != null && "intra-app".equalsIgnoreCase(urlMode)) {
-                if (request != null && response != null) {
-                    RequestHandler rh = RequestHandler.from(request);
-                    urlString = rh.makeLink(request, response, src, fullPath, 
secure, encode);
-                } else {
-                    urlString = src;
-                }
-            } else if (urlMode != null && "content".equalsIgnoreCase(urlMode)) 
{
-                if (request != null && response != null) {
-                    StringBuilder newURL = new StringBuilder();
-                    ContentUrlTag.appendContentPrefix(request, newURL);
-                    newURL.append(src);
-                    urlString = newURL.toString();
-                }
-            } else {
-                urlString = src;
-            }
-            UtilCodec.SimpleEncoder simpleEncoder = (UtilCodec.SimpleEncoder) 
context.get("simpleEncoder");
-            if (simpleEncoder != null) {
-                urlString = simpleEncoder.encode(urlString);
-            }
-            writer.append(urlString);
-            writer.append("\"");
-        }
-        writer.append("/>");
-
-    }
-
-    @Override
-    public ScreenStringRenderer getScreenStringRenderer(Map<String, Object> 
context) {
-        VisualTheme visualTheme = (VisualTheme) context.get("visualTheme");
-        ModelTheme modelTheme = visualTheme.getModelTheme();
-        ScreenRenderer screenRenderer = (ScreenRenderer) 
context.get("screens");
-        if (screenRenderer != null) {
-            screenStringRenderer = screenRenderer.getScreenStringRenderer();
-        } else {
-            if (screenStringRenderer == null) {
-                try {
-                    screenStringRenderer = new 
MacroScreenRenderer(modelTheme.getType("screen"), 
modelTheme.getScreenRendererLocation("screen"));
-                } catch (TemplateException | IOException e) {
-                    Debug.logError(e, MODULE);
-                }
-            }
-        }
-        return screenStringRenderer;
-    }
-}
diff --git 
a/framework/widget/src/main/resources/org/apache/ofbiz/widget/freemarkerTransforms.properties
 
b/framework/widget/src/main/resources/org/apache/ofbiz/widget/freemarkerTransforms.properties
deleted file mode 100644
index 8254505588..0000000000
--- 
a/framework/widget/src/main/resources/org/apache/ofbiz/widget/freemarkerTransforms.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-###############################################################################
-### FreeMarker transforms ###
-#############################
-
-# entries are in the form: key=transform name, property=transform class name
-
-menuWrap=org.apache.ofbiz.widget.renderer.MenuWrapTransform

Reply via email to