This is an automated email from the ASF dual-hosted git repository.
nmalin 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 5229d57 Implemented: Element link can update partial area
(OFBIZ-11810)
5229d57 is described below
commit 5229d572df72f23601253a32b565c50c72b6bd19
Author: Nicolas Malin <[email protected]>
AuthorDate: Wed Feb 17 18:11:19 2021 +0100
Implemented: Element link can update partial area
(OFBIZ-11810)
Currently when you want to display an information easily on sub-screen
dynamically (example as related element) is currently not possible without
write specific js code.
To simplify it, we introduce a new link type: update-area, to indicate
to the theme that we want to refresh a local area with the call result.
Example :
<link target="ListCategoryProductMembers" link-type="update-area"
target-window="detail">
<parameter param-name="productCategoryId"/>
</link>
For this example we indicate that the display result of target
'ListCategoryProductMembers' is going
on the area identify by 'detail'. Pleasure to the theme to manage it.
---
framework/widget/dtd/widget-common.xsd | 7 +
.../widget/renderer/macro/MacroCommonRenderer.java | 146 +++++++++++++++++++++
.../widget/renderer/macro/MacroFormRenderer.java | 136 ++-----------------
.../widget/renderer/macro/MacroMenuRenderer.java | 27 ++--
.../widget/renderer/macro/MacroScreenRenderer.java | 7 +-
.../template/macro/HtmlMenuMacroLibrary.ftl | 2 +-
.../template/macro/HtmlScreenMacroLibrary.ftl | 4 +-
.../template/macro/HtmlMenuMacroLibrary.ftl | 2 +-
8 files changed, 179 insertions(+), 152 deletions(-)
diff --git a/framework/widget/dtd/widget-common.xsd
b/framework/widget/dtd/widget-common.xsd
index bd23e32..7b18e40 100644
--- a/framework/widget/dtd/widget-common.xsd
+++ b/framework/widget/dtd/widget-common.xsd
@@ -559,6 +559,13 @@ under the License.
<xs:enumeration value="anchor" />
<xs:enumeration value="hidden-form" />
<xs:enumeration value="layered-modal" />
+ <xs:enumeration value="update-area">
+ <xs:annotation>
+ <xs:documentation>
+ Specify a specific area to update with a
screen injection.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
diff --git
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroCommonRenderer.java
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroCommonRenderer.java
new file mode 100644
index 0000000..8fb85f5
--- /dev/null
+++
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroCommonRenderer.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * 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.macro;
+
+import java.net.URI;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.ofbiz.base.util.StringUtil;
+import org.apache.ofbiz.base.util.UtilGenerics;
+import org.apache.ofbiz.base.util.UtilHttp;
+import org.apache.ofbiz.base.util.UtilMisc;
+import org.apache.ofbiz.base.util.string.FlexibleStringExpander;
+import org.apache.ofbiz.webapp.control.RequestHandler;
+import org.apache.ofbiz.widget.WidgetWorker;
+import org.apache.ofbiz.widget.model.CommonWidgetModels;
+import org.apache.ofbiz.widget.model.ModelForm;
+
+/**
+ * TODO : Migrate to {@link
org.apache.ofbiz.widget.renderer.macro.renderable.RenderableFtl}
+ */
+public class MacroCommonRenderer {
+
+ /**
+ * Create an ajaxXxxx JavaScript CSV string from a list of UpdateArea
objects. See
+ * <code>OfbizUtil.js</code>.
+ * @param updateAreas
+ * @param extraParams Renderer-supplied additional target parameters Map
+ * @param anchor
+ * @param context
+ * @return Parameter string or empty string if no UpdateArea objects were
found
+ */
+ public static String
createAjaxParamsFromUpdateAreas(List<ModelForm.UpdateArea> updateAreas,
Map<String, Object> extraParams,
+ String anchor, Map<String,
? extends Object> context) {
+
+ HttpServletRequest request = (HttpServletRequest)
context.get("request");
+ HttpServletResponse response = (HttpServletResponse)
context.get("response");
+ RequestHandler rh = RequestHandler.from(request);
+
+ StringBuilder sb = new StringBuilder();
+ Iterator<ModelForm.UpdateArea> updateAreaIter = updateAreas.iterator();
+ while (updateAreaIter.hasNext()) {
+ ModelForm.UpdateArea updateArea = updateAreaIter.next();
+ sb.append(updateArea.getAreaId()).append(",");
+ String ajaxTarget = updateArea.getAreaTarget(context);
+ String urlPath = UtilHttp.removeQueryStringFromTarget(ajaxTarget);
+ sb.append(rh.makeLink(request, response, urlPath)).append(",");
+ String queryString =
UtilHttp.getQueryStringFromTarget(ajaxTarget).replace("?", "");
+ Map<String, Object> parameters =
UtilHttp.getQueryStringOnlyParameterMap(queryString);
+ Map<String, Object> ctx = UtilGenerics.cast(context);
+ Map<String, Object> updateParams =
UtilGenerics.cast(updateArea.getParameterMap(ctx));
+ parameters.putAll(updateParams);
+ UtilHttp.canonicalizeParameterMap(parameters);
+ if (extraParams != null) {
+ parameters.putAll(extraParams);
+ }
+ Iterator<Map.Entry<String, Object>> paramIter =
parameters.entrySet().iterator();
+ while (paramIter.hasNext()) {
+ Map.Entry<String, Object> entry = paramIter.next();
+ sb.append(entry.getKey()).append("=").append(entry.getValue());
+ if (paramIter.hasNext()) {
+ sb.append("&");
+ }
+ }
+ if (anchor != null) {
+ sb.append("#").append(anchor);
+ }
+ if (updateAreaIter.hasNext()) {
+ sb.append(",");
+ }
+ }
+ Locale locale = UtilMisc.ensureLocale(context.get("locale"));
+ return FlexibleStringExpander.expandString(sb.toString(), context,
locale);
+ }
+
+ /** Create an ajaxXxxx JavaScript CSV string from a list of UpdateArea
objects. See
+ * <code>OfbizUtil.js</code>.
+ * @param updateAreas
+ * @param extraParams Renderer-supplied additional target parameters String
+ * @param context
+ * @return Parameter string or empty string if no UpdateArea objects were
found
+ */
+ public static String
createAjaxParamsFromUpdateAreas(List<ModelForm.UpdateArea> updateAreas, String
extraParams,
+ Map<String, ? extends
Object> context) {
+ Map<String, Object> extraParamsAsMap =
buildParamMapFromString(extraParams);
+ return createAjaxParamsFromUpdateAreas(updateAreas, extraParamsAsMap,
null, context);
+ }
+
+ private static Map<String, Object> buildParamMapFromString(String
extraParams) {
+ Map<String, Object> extraParamsAsMap = null;
+ if (extraParams != null) {
+ while (extraParams.startsWith("&")) {
+ extraParams = extraParams.replaceFirst("&", "");
+ }
+ extraParamsAsMap =
UtilGenerics.cast(StringUtil.strToMap(extraParams, "&", false));
+ }
+ return extraParamsAsMap;
+ }
+
+ /**
+ * Analyze the context against the link type to resolve the url to call
+ * @param context
+ * @return
+ */
+ public static String getLinkUrl(CommonWidgetModels.Link link, Map<String,
Object> context) {
+ String linkUrl;
+
+ HttpServletRequest request = (HttpServletRequest)
context.get("request");
+ HttpServletResponse response = (HttpServletResponse)
context.get("response");
+ switch (link.getLinkType()) {
+ case "update-area":
+ ModelForm.UpdateArea resolveUpdateArea = new
ModelForm.UpdateArea("onclick",
+
WidgetWorker.getScreenStack(context).resolveScreenAreaId(link.getTargetWindow(context)),
+ link.getTarget(context));
+ linkUrl =
createAjaxParamsFromUpdateAreas(UtilMisc.toList(resolveUpdateArea),
+ UtilHttp.urlEncodeArgs(link.getParameterMap(context)),
context);
+ break;
+ default:
+ final URI linkUri =
WidgetWorker.buildHyperlinkUri(link.getTarget(context), link.getUrlMode(),
+ "layered-modal".equals(link.getLinkType()) ? null :
link.getParameterMap(context), link.getPrefix(context),
+ link.getFullPath(), link.getSecure(), link.getEncode(),
+ request, response);
+ linkUrl = linkUri.toString();
+ }
+ return linkUrl;
+ }
+}
diff --git
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
index 27eb9f1..eca47ff 100644
---
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
+++
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
@@ -138,20 +138,6 @@ public final class MacroFormRenderer implements
FormStringRenderer {
return htmlString.replaceAll("\"", "\\\\\"");
}
- /**
- * Extracts parameters from a target URL string, prepares them for an Ajax
- * JavaScript call. This method is currently set to return a parameter
string
- * suitable for the Prototype.js library.
- * @param target Target URL string
- * @return Parameter string
- */
- public static String getAjaxParamsFromTarget(String target) {
- String targetParams = UtilHttp.getQueryStringFromTarget(target);
- targetParams = targetParams.replace("?", "");
- targetParams = targetParams.replace("&", "&");
- return targetParams;
- }
-
public boolean getRenderPagination() {
return this.renderPagination;
}
@@ -1023,7 +1009,7 @@ public final class MacroFormRenderer implements
FormStringRenderer {
&& this.javaScriptEnabled;
String ajaxUrl = "";
if (ajaxEnabled) {
- ajaxUrl = createAjaxParamsFromUpdateAreas(updateAreas, "",
context);
+ ajaxUrl =
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, "", context);
}
String tabindex = modelFormField.getTabindex();
StringWriter sr = new StringWriter();
@@ -2118,7 +2104,7 @@ public final class MacroFormRenderer implements
FormStringRenderer {
this.appendContentUrl(imgSrc, "/images/fieldlookup.gif");
String ajaxUrl = "";
if (ajaxEnabled) {
- ajaxUrl = createAjaxParamsFromUpdateAreas(updateAreas, "",
context);
+ ajaxUrl =
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, "", context);
}
String lookupPresentation = lookupField.getLookupPresentation();
if (UtilValidate.isEmpty(lookupPresentation)) {
@@ -2342,7 +2328,7 @@ public final class MacroFormRenderer implements
FormStringRenderer {
String ajaxLastUrl = "";
if (viewIndex > 0) {
if (ajaxEnabled) {
- ajaxFirstUrl = createAjaxParamsFromUpdateAreas(updateAreas,
prepLinkText + 0 + anchor, context);
+ ajaxFirstUrl =
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, prepLinkText +
0 + anchor, context);
} else {
linkText = prepLinkText + 0 + anchor;
firstUrl = rh.makeLink(this.request, this.response, urlPath +
linkText);
@@ -2350,7 +2336,7 @@ public final class MacroFormRenderer implements
FormStringRenderer {
}
if (viewIndex > 0) {
if (ajaxEnabled) {
- ajaxPreviousUrl = createAjaxParamsFromUpdateAreas(updateAreas,
prepLinkText + (viewIndex - 1) + anchor, context);
+ ajaxPreviousUrl =
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, prepLinkText +
(viewIndex - 1) + anchor, context);
} else {
linkText = prepLinkText + (viewIndex - 1) + anchor;
previousUrl = rh.makeLink(this.request, this.response, urlPath
+ linkText);
@@ -2359,7 +2345,7 @@ public final class MacroFormRenderer implements
FormStringRenderer {
// Page select dropdown
if (listSize > 0 && this.javaScriptEnabled) {
if (ajaxEnabled) {
- ajaxSelectUrl = createAjaxParamsFromUpdateAreas(updateAreas,
prepLinkText + "' + this.value + '", context);
+ ajaxSelectUrl =
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, prepLinkText +
"' + this.value + '", context);
} else {
linkText = prepLinkText;
if (linkText.startsWith("/")) {
@@ -2371,7 +2357,7 @@ public final class MacroFormRenderer implements
FormStringRenderer {
// Next button
if (highIndex < listSize) {
if (ajaxEnabled) {
- ajaxNextUrl = createAjaxParamsFromUpdateAreas(updateAreas,
prepLinkText + (viewIndex + 1) + anchor, context);
+ ajaxNextUrl =
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, prepLinkText +
(viewIndex + 1) + anchor, context);
} else {
linkText = prepLinkText + (viewIndex + 1) + anchor;
nextUrl = rh.makeLink(this.request, this.response, urlPath +
linkText);
@@ -2381,7 +2367,7 @@ public final class MacroFormRenderer implements
FormStringRenderer {
if (highIndex < listSize) {
int lastIndex = UtilMisc.getViewLastIndex(listSize, viewSize);
if (ajaxEnabled) {
- ajaxLastUrl = createAjaxParamsFromUpdateAreas(updateAreas,
prepLinkText + lastIndex + anchor, context);
+ ajaxLastUrl =
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, prepLinkText +
lastIndex + anchor, context);
} else {
linkText = prepLinkText + lastIndex + anchor;
lastUrl = rh.makeLink(this.request, this.response, urlPath +
linkText);
@@ -2390,7 +2376,7 @@ public final class MacroFormRenderer implements
FormStringRenderer {
// Page size select dropdown
if (listSize > 0 && this.javaScriptEnabled) {
if (ajaxEnabled) {
- ajaxSelectSizeUrl =
createAjaxParamsFromUpdateAreas(updateAreas, prepLinkSizeText + anchor,
context);
+ ajaxSelectSizeUrl =
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas,
prepLinkSizeText + anchor, context);
} else {
linkText = prepLinkSizeText;
if (linkText.startsWith("/")) {
@@ -2834,7 +2820,7 @@ public final class MacroFormRenderer implements
FormStringRenderer {
UtilHttp.canonicalizeParameterMap(paramMap);
String linkUrl = null;
if (ajaxEnabled) {
- linkUrl = createAjaxParamsFromUpdateAreas(updateAreas, paramMap,
null, context);
+ linkUrl =
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, paramMap,
null, context);
} else {
StringBuilder sb = new StringBuilder("?");
Iterator<Map.Entry<String, Object>> iter =
paramMap.entrySet().iterator();
@@ -2872,110 +2858,6 @@ public final class MacroFormRenderer implements
FormStringRenderer {
executeMacro(writer, sr.toString());
}
- /**
- * Create an ajaxXxxx JavaScript CSV string from a list of UpdateArea
objects. See
- * <code>OfbizUtil.js</code>.
- * @param updateAreas
- * @param extraParams Renderer-supplied additional target parameters
- * @param context
- * @return Parameter string or empty string if no UpdateArea objects were
found
- */
- private String createAjaxParamsFromUpdateAreas(List<ModelForm.UpdateArea>
updateAreas, Map<String, Object> extraParams,
- String anchor, Map<String,
? extends Object> context) {
- StringBuilder sb = new StringBuilder();
- Iterator<ModelForm.UpdateArea> updateAreaIter = updateAreas.iterator();
- while (updateAreaIter.hasNext()) {
- ModelForm.UpdateArea updateArea = updateAreaIter.next();
- sb.append(updateArea.getAreaId()).append(",");
- String ajaxTarget = updateArea.getAreaTarget(context);
- String urlPath = UtilHttp.removeQueryStringFromTarget(ajaxTarget);
- sb.append(this.rh.makeLink(this.request, this.response,
urlPath)).append(",");
- String queryString =
UtilHttp.getQueryStringFromTarget(ajaxTarget).replace("?", "");
- Map<String, Object> parameters =
UtilHttp.getQueryStringOnlyParameterMap(queryString);
- Map<String, Object> ctx = UtilGenerics.cast(context);
- Map<String, Object> updateParams =
UtilGenerics.cast(updateArea.getParameterMap(ctx));
- parameters.putAll(updateParams);
- UtilHttp.canonicalizeParameterMap(parameters);
- parameters.putAll(extraParams);
- Iterator<Map.Entry<String, Object>> paramIter =
parameters.entrySet().iterator();
- while (paramIter.hasNext()) {
- Map.Entry<String, Object> entry = paramIter.next();
- sb.append(entry.getKey()).append("=").append(entry.getValue());
- if (paramIter.hasNext()) {
- sb.append("&");
- }
- }
- if (anchor != null) {
- sb.append("#").append(anchor);
- }
- if (updateAreaIter.hasNext()) {
- sb.append(",");
- }
- }
- Locale locale = UtilMisc.ensureLocale(context.get("locale"));
- return FlexibleStringExpander.expandString(sb.toString(), context,
locale);
- }
-
- /**
- * Create an ajaxXxxx JavaScript CSV string from a list of UpdateArea
objects. See
- * <code>OfbizUtil.js</code>.
- * @param updateAreas
- * @param extraParams Renderer-supplied additional target parameters
- * @param context
- * @return Parameter string or empty string if no UpdateArea objects were
found
- */
- public String createAjaxParamsFromUpdateAreas(List<ModelForm.UpdateArea>
updateAreas, String extraParams, Map<String, ? extends Object> context) {
- //FIXME copy from HtmlFormRenderer.java
- if (updateAreas == null) {
- return "";
- }
- String ajaxUrl = "";
- boolean firstLoop = true;
- for (ModelForm.UpdateArea updateArea : updateAreas) {
- if (firstLoop) {
- firstLoop = false;
- } else {
- ajaxUrl += ",";
- }
- Map<String, Object> ctx = UtilGenerics.cast(context);
- Map<String, String> parameters = updateArea.getParameterMap(ctx);
- String targetUrl = updateArea.getAreaTarget(context);
- String ajaxParams;
- StringBuffer ajaxParamsBuffer = new StringBuffer();
- ajaxParamsBuffer.append(getAjaxParamsFromTarget(targetUrl));
- //add first parameters from updateArea parameters
- if (UtilValidate.isNotEmpty(parameters)) {
- for (Map.Entry<String, String> entry : parameters.entrySet()) {
- String key = entry.getKey();
- String value = entry.getValue();
- //test if ajax parameters are not already into
extraParams, if so do not add it
- if (UtilValidate.isNotEmpty(extraParams) &&
extraParams.contains(value)) {
- continue;
- }
- if (ajaxParamsBuffer.length() > 0 &&
ajaxParamsBuffer.indexOf(key) < 0) {
- ajaxParamsBuffer.append("&");
- }
- if (ajaxParamsBuffer.indexOf(key) < 0) {
- ajaxParamsBuffer.append(key).append("=").append(value);
- }
- }
- }
- //then add parameters from request. Those parameters could end
with an anchor so we must set ajax parameters first
- if (UtilValidate.isNotEmpty(extraParams)) {
- if (ajaxParamsBuffer.length() > 0 &&
!extraParams.startsWith("&")) {
- ajaxParamsBuffer.append("&");
- }
- ajaxParamsBuffer.append(extraParams);
- }
- ajaxParams = ajaxParamsBuffer.toString();
- ajaxUrl += updateArea.getAreaId() + ",";
- ajaxUrl += this.rh.makeLink(this.request, this.response,
UtilHttp.removeQueryStringFromTarget(targetUrl));
- ajaxUrl += "," + ajaxParams;
- }
- Locale locale = UtilMisc.ensureLocale(context.get("locale"));
- return FlexibleStringExpander.expandString(ajaxUrl, context, locale);
- }
-
private void appendTooltip(Appendable writer, Map<String, Object> context,
ModelFormField modelFormField) {
// render the tooltip, in other methods too
writeFtlElement(writer,
renderableFtlFormElementsBuilder.tooltip(context, modelFormField));
diff --git
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroMenuRenderer.java
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroMenuRenderer.java
index f3b55ee..264c836 100644
---
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroMenuRenderer.java
+++
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroMenuRenderer.java
@@ -200,19 +200,20 @@ public class MacroMenuRenderer implements
MenuStringRenderer {
@Override
public void renderLink(Appendable writer, Map<String, Object> context,
MenuLink link) throws IOException {
- Map<String, Object> parameters = new HashMap<>();
String target = link.getTarget(context);
ModelMenuItem menuItem = link.getLinkMenuItem();
if (isDisableIfEmpty(menuItem, context)) {
target = null;
}
- parameters.put("id", link.getId(context));
- parameters.put("style", link.getStyle(context));
- parameters.put("name", link.getName(context));
- parameters.put("text", link.getText(context));
- parameters.put("height", link.getHeight());
- parameters.put("width", link.getWidth());
- parameters.put("targetWindow", link.getTargetWindow(context));
+ Map<String, Object> parameters = UtilMisc.toMap(
+ "id", link.getId(context),
+ "style", link.getStyle(context),
+ "name", link.getName(context),
+ "text", link.getText(context),
+ "height", link.getHeight(),
+ "width", link.getWidth(),
+ "targetWindow", link.getTargetWindow(context));
+
StringBuffer uniqueItemName = new
StringBuffer(menuItem.getModelMenu().getName());
uniqueItemName.append("_").append(menuItem.getName()).append("_LF_").append(UtilMisc.<String>addToBigDecimalInMap(context,
"menuUniqueItemIndex", BigDecimal.ONE));
@@ -227,6 +228,7 @@ public class MacroMenuRenderer implements
MenuStringRenderer {
}
}
parameters.put("uniqueItemName", uniqueItemName.toString());
+
String linkType = "";
if (UtilValidate.isNotEmpty(target)) {
linkType = WidgetWorker.determineAutoLinkType(link.getLinkType(),
target, link.getUrlMode(), request);
@@ -234,6 +236,7 @@ public class MacroMenuRenderer implements
MenuStringRenderer {
parameters.put("linkType", linkType);
String linkUrl = "";
String actionUrl = "";
+
StringBuilder targetParameters = new StringBuilder();
if ("hidden-form".equals(linkType) ||
"layered-modal".equals(linkType)) {
final URI actionUri = WidgetWorker.buildHyperlinkUri(target,
link.getUrlMode(), null,
@@ -260,13 +263,7 @@ public class MacroMenuRenderer implements
MenuStringRenderer {
targetParameters.append("\"\"");
}
if (UtilValidate.isNotEmpty(target)) {
- if (!"hidden-form".equals(linkType)) {
- final URI linkUri = WidgetWorker.buildHyperlinkUri(target,
link.getUrlMode(),
- "layered-modal".equals(linkType) ? null :
link.getParameterMap(context),
- link.getPrefix(context), link.getFullPath(),
link.getSecure(), link.getEncode(),
- request, response);
- linkUrl = linkUri.toString();
- }
+ linkUrl = MacroCommonRenderer.getLinkUrl(link.getLink(), context);
}
parameters.put("linkUrl", linkUrl);
parameters.put("actionUrl", actionUrl);
diff --git
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroScreenRenderer.java
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroScreenRenderer.java
index e4ed5b2..5fdb210 100644
---
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroScreenRenderer.java
+++
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroScreenRenderer.java
@@ -310,12 +310,7 @@ public class MacroScreenRenderer implements
ScreenStringRenderer {
String name = link.getName(context);
String text = link.getText(context);
if (UtilValidate.isNotEmpty(target)) {
- if (!"hidden-form".equals(linkType)) {
- final URI uri = WidgetWorker.buildHyperlinkUri(target,
link.getUrlMode(), link.getParameterMap(context),
- link.getPrefix(context), link.getFullPath(),
link.getSecure(), link.getEncode(),
- request, response);
- linkUrl = uri.toString();
- }
+ linkUrl = MacroCommonRenderer.getLinkUrl(link.getLink(), context);
}
String imgStr = "";
ModelScreenWidget.ScreenImage img = link.getImage();
diff --git a/themes/common-theme/template/macro/HtmlMenuMacroLibrary.ftl
b/themes/common-theme/template/macro/HtmlMenuMacroLibrary.ftl
index a440739..644f5ef 100644
--- a/themes/common-theme/template/macro/HtmlMenuMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/HtmlMenuMacroLibrary.ftl
@@ -72,7 +72,7 @@ under the License.
<#if text?has_content>${text}</#if></a>
<#else>
<#if (linkType?has_content && "hidden-form" == linkType) ||
linkUrl?has_content>
-<a<#if id?has_content> id="${id}"</#if><#if style?has_content>
class="${style}"</#if><#if name?has_content> name="${name}"</#if><#if
targetWindow?has_content> target="${targetWindow}"</#if> href="<#if
"hidden-form"==linkType>javascript:document.${uniqueItemName}.submit()<#else>${linkUrl}</#if>"><#rt/>
+<a<#if id?has_content> id="${id}"</#if><#if style?has_content>
class="${style}"</#if><#if name?has_content> name="${name}"</#if><#if
targetWindow?has_content && "update-area" != linkType>
target="${targetWindow}"</#if> href="<#if "hidden-form"==linkType><#if
linkUrl?has_content>javascript:ajaxSubmitFormUpdateAreas('${uniqueItemName}',
'${linkUrl}')<#else>javascript:document.${uniqueItemName}.submit()</#if><#else><#if
"update-area" == linkType>javascript:ajaxUpdateAreas('${linkUrl}')<#els [...]
</#if>
<#if imgStr?has_content>${imgStr}</#if> <#if
text?has_content>${text}</#if><#rt/>
<#if (linkType?has_content && "hidden-form" == linkType) ||
linkUrl?has_content></a><#rt/></#if>
diff --git a/themes/common-theme/template/macro/HtmlScreenMacroLibrary.ftl
b/themes/common-theme/template/macro/HtmlScreenMacroLibrary.ftl
index 2d5b65e..1dc0ec1 100644
--- a/themes/common-theme/template/macro/HtmlScreenMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/HtmlScreenMacroLibrary.ftl
@@ -109,8 +109,8 @@ under the License.
<#if id?has_content>id="${id}"</#if>
<#if style?has_content>class="${style}"</#if>
<#if name?has_content>name="${name}"</#if>
- <#if targetWindow?has_content>target="${targetWindow}"</#if>
- href="<#if
"hidden-form"==linkType>javascript:document.${uniqueItemName}.submit()<#else>${linkUrl}</#if>"><#rt/>
+ <#if targetWindow?has_content && "update-area" !=
linkType>target="${targetWindow}"</#if>
+ href="<#if
"hidden-form"==linkType>javascript:document.${uniqueItemName}.submit()<#else><#if
"update-area" ==
linkType>javascript:ajaxUpdateAreas('${linkUrl}')<#else>${linkUrl}</#if></#if>"><#rt/>
<#if imgStr?has_content>${imgStr}</#if><#if
text?has_content>${text}</#if>
</a>
<#else>
diff --git a/themes/rainbowstone/template/macro/HtmlMenuMacroLibrary.ftl
b/themes/rainbowstone/template/macro/HtmlMenuMacroLibrary.ftl
index d0233fc..bc58a31 100644
--- a/themes/rainbowstone/template/macro/HtmlMenuMacroLibrary.ftl
+++ b/themes/rainbowstone/template/macro/HtmlMenuMacroLibrary.ftl
@@ -45,7 +45,7 @@ under the License.
<#if text?has_content>${text}</#if></a>
<#else>
<#if (linkType?has_content && "hidden-form" == linkType) ||
linkUrl?has_content>
- <a<#if id?has_content> id="${id}"</#if><#if style?has_content>
class="${style}"</#if><#if name?has_content> name="${name}"</#if><#if
targetWindow?has_content> target="${targetWindow}"</#if> href="<#if
"hidden-form"==linkType>javascript:document.${uniqueItemName}.submit()<#else>${linkUrl}</#if>"><#rt/>
+ <a<#if id?has_content> id="${id}"</#if><#if style?has_content>
class="${style}"</#if><#if name?has_content> name="${name}"</#if><#if
targetWindow?has_content && "update-area" != linkType>
target="${targetWindow}"</#if> href="<#if "hidden-form"==linkType><#if
linkUrl?has_content>javascript:ajaxSubmitFormUpdateAreas('${uniqueItemName}',
'${linkUrl}')<#else>javascript:document.${uniqueItemName}.submit()</#if><#else><#if
"update-area" == linkType>javascript:ajaxUpdateAreas('${linkUrl [...]
</#if>
<#if imgStr?has_content>${imgStr}</#if><#if
text?has_content>${text}</#if><#rt/>
<#if (linkType?has_content && "hidden-form" == linkType) ||
linkUrl?has_content></a><#rt/></#if>