Improved: Could not find PortalPage with portalPageId [] (OFBIZ-13071)
No need to try to render a PortalPage when there is no PortalPage
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelScreenWidget.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelScreenWidget.java
index b05c19d..95806b4 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelScreenWidget.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelScreenWidget.java
@@ -1953,114 +1953,119 @@
@Override
public void renderWidgetString(Appendable writer, Map<String, Object> context,
- ScreenStringRenderer screenStringRenderer) throws GeneralException, IOException {
- try {
- Delegator delegator = (Delegator) context.get("delegator");
- List<GenericValue> portalPageColumns = null;
- List<GenericValue> portalPagePortlets = null;
- List<GenericValue> portletAttributes = null;
- GenericValue portalPage = getPortalPageValue(context);
- String actualPortalPageId = portalPage.getString("portalPageId");
- portalPageColumns = EntityQuery.use(delegator)
- .from("PortalPageColumn")
- .where("portalPageId", actualPortalPageId)
- .orderBy("columnSeqId")
- .cache(true)
- .queryList();
+ ScreenStringRenderer screenStringRenderer) throws GeneralException, IOException {
+ GenericValue portalPage = getPortalPageValue(context);
+ if (portalPage != null) {
+ try {
+ Delegator delegator = (Delegator) context.get("delegator");
+ List<GenericValue> portalPageColumns = null;
+ List<GenericValue> portalPagePortlets = null;
+ List<GenericValue> portletAttributes = null;
+ String actualPortalPageId = portalPage.getString("portalPageId");
+ portalPageColumns = EntityQuery.use(delegator)
+ .from("PortalPageColumn")
+ .where("portalPageId", actualPortalPageId)
+ .orderBy("columnSeqId")
+ .cache(true)
+ .queryList();
- // Renders the portalPage header
- screenStringRenderer.renderPortalPageBegin(writer, context, this);
+ // Renders the portalPage header
+ screenStringRenderer.renderPortalPageBegin(writer, context, this);
- // First column has no previous column
- String prevColumnSeqId = "";
+ // First column has no previous column
+ String prevColumnSeqId = "";
- // Iterates through the PortalPage columns
- ListIterator<GenericValue> columnsIterator = portalPageColumns.listIterator();
- while (columnsIterator.hasNext()) {
- GenericValue columnValue = columnsIterator.next();
- String columnSeqId = columnValue.getString("columnSeqId");
+ // Iterates through the PortalPage columns
+ ListIterator<GenericValue> columnsIterator = portalPageColumns.listIterator();
+ while (columnsIterator.hasNext()) {
+ GenericValue columnValue = columnsIterator.next();
+ String columnSeqId = columnValue.getString("columnSeqId");
- // Renders the portalPageColumn header
- screenStringRenderer.renderPortalPageColumnBegin(writer, context, this, columnValue);
+ // Renders the portalPageColumn header
+ screenStringRenderer.renderPortalPageColumnBegin(writer, context, this, columnValue);
- // Get the Portlets located in the current column
- portalPagePortlets = EntityQuery.use(delegator)
- .from("PortalPagePortletView")
- .where("portalPageId", portalPage.getString("portalPageId"), "columnSeqId", columnSeqId)
- .orderBy("sequenceNum")
- .queryList();
- // First Portlet in a Column has no previous Portlet
- String prevPortletId = "";
- String prevPortletSeqId = "";
+ // Get the Portlets located in the current column
+ portalPagePortlets = EntityQuery.use(delegator)
+ .from("PortalPagePortletView")
+ .where("portalPageId", portalPage.getString("portalPageId"), "columnSeqId", columnSeqId)
+ .orderBy("sequenceNum")
+ .queryList();
+ // First Portlet in a Column has no previous Portlet
+ String prevPortletId = "";
+ String prevPortletSeqId = "";
- // If this is not the last column, get the next columnSeqId
- String nextColumnSeqId = "";
- if (columnsIterator.hasNext()) {
- nextColumnSeqId = portalPageColumns.get(columnsIterator.nextIndex()).getString("columnSeqId");
+ // If this is not the last column, get the next columnSeqId
+ String nextColumnSeqId = "";
+ if (columnsIterator.hasNext()) {
+ nextColumnSeqId = portalPageColumns.get(columnsIterator.nextIndex()).getString("columnSeqId");
+ }
+
+ // Iterates through the Portlets in the Column
+ ListIterator<GenericValue> portletsIterator = portalPagePortlets.listIterator();
+ while (portletsIterator.hasNext()) {
+ GenericValue portletValue = portletsIterator.next();
+
+ // If not the last portlet in the column, get the next nextPortletId and nextPortletSeqId
+ String nextPortletId = "";
+ String nextPortletSeqId = "";
+ if (portletsIterator.hasNext()) {
+ nextPortletId = portalPagePortlets.get(portletsIterator.nextIndex()).getString("portalPortletId");
+ nextPortletSeqId = portalPagePortlets.get(portletsIterator.nextIndex()).getString("portletSeqId");
+ }
+
+ // Set info to allow portlet movement in the page
+ context.put("prevPortletId", prevPortletId);
+ context.put("prevPortletSeqId", prevPortletSeqId);
+ context.put("nextPortletId", nextPortletId);
+ context.put("nextPortletSeqId", nextPortletSeqId);
+ context.put("prevColumnSeqId", prevColumnSeqId);
+ context.put("nextColumnSeqId", nextColumnSeqId);
+
+ // Get portlet's attributes
+ portletAttributes = EntityQuery.use(delegator)
+ .from("PortletAttribute")
+ .where("portalPageId", portletValue.get("portalPageId"),
+ "portalPortletId", portletValue.get("portalPortletId"),
+ "portletSeqId", portletValue.get("portletSeqId"))
+ .queryList();
+
+ ListIterator<GenericValue> attributesIterator = portletAttributes.listIterator();
+ while (attributesIterator.hasNext()) {
+ GenericValue attribute = attributesIterator.next();
+ context.put(attribute.getString("attrName"), attribute.getString("attrValue"));
+ }
+
+ // Renders the portalPagePortlet
+ screenStringRenderer.renderPortalPagePortletBegin(writer, context, this, portletValue);
+ screenStringRenderer.renderPortalPagePortletBody(writer, context, this, portletValue);
+ screenStringRenderer.renderPortalPagePortletEnd(writer, context, this, portletValue);
+
+ // Remove the portlet's attributes so that these are not available for other portlets
+ while (attributesIterator.hasPrevious()) {
+ GenericValue attribute = attributesIterator.previous();
+ context.remove(attribute.getString("attrName"));
+ }
+
+ // Uses the actual portlet as prevPortlet for next iteration
+ prevPortletId = (String) portletValue.get("portalPortletId");
+ prevPortletSeqId = (String) portletValue.get("portletSeqId");
+ }
+ // Renders the portalPageColumn footer
+ screenStringRenderer.renderPortalPageColumnEnd(writer, context, this, columnValue);
+
+ // Uses the actual columnSeqId as prevColumnSeqId for next iteration
+ prevColumnSeqId = columnSeqId;
}
-
- // Iterates through the Portlets in the Column
- ListIterator<GenericValue> portletsIterator = portalPagePortlets.listIterator();
- while (portletsIterator.hasNext()) {
- GenericValue portletValue = portletsIterator.next();
-
- // If not the last portlet in the column, get the next nextPortletId and nextPortletSeqId
- String nextPortletId = "";
- String nextPortletSeqId = "";
- if (portletsIterator.hasNext()) {
- nextPortletId = portalPagePortlets.get(portletsIterator.nextIndex()).getString("portalPortletId");
- nextPortletSeqId = portalPagePortlets.get(portletsIterator.nextIndex()).getString("portletSeqId");
- }
-
- // Set info to allow portlet movement in the page
- context.put("prevPortletId", prevPortletId);
- context.put("prevPortletSeqId", prevPortletSeqId);
- context.put("nextPortletId", nextPortletId);
- context.put("nextPortletSeqId", nextPortletSeqId);
- context.put("prevColumnSeqId", prevColumnSeqId);
- context.put("nextColumnSeqId", nextColumnSeqId);
-
- // Get portlet's attributes
- portletAttributes = EntityQuery.use(delegator)
- .from("PortletAttribute")
- .where("portalPageId", portletValue.get("portalPageId"),
- "portalPortletId", portletValue.get("portalPortletId"),
- "portletSeqId", portletValue.get("portletSeqId"))
- .queryList();
-
- ListIterator<GenericValue> attributesIterator = portletAttributes.listIterator();
- while (attributesIterator.hasNext()) {
- GenericValue attribute = attributesIterator.next();
- context.put(attribute.getString("attrName"), attribute.getString("attrValue"));
- }
-
- // Renders the portalPagePortlet
- screenStringRenderer.renderPortalPagePortletBegin(writer, context, this, portletValue);
- screenStringRenderer.renderPortalPagePortletBody(writer, context, this, portletValue);
- screenStringRenderer.renderPortalPagePortletEnd(writer, context, this, portletValue);
-
- // Remove the portlet's attributes so that these are not available for other portlets
- while (attributesIterator.hasPrevious()) {
- GenericValue attribute = attributesIterator.previous();
- context.remove(attribute.getString("attrName"));
- }
-
- // Uses the actual portlet as prevPortlet for next iteration
- prevPortletId = (String) portletValue.get("portalPortletId");
- prevPortletSeqId = (String) portletValue.get("portletSeqId");
- }
- // Renders the portalPageColumn footer
- screenStringRenderer.renderPortalPageColumnEnd(writer, context, this, columnValue);
-
- // Uses the actual columnSeqId as prevColumnSeqId for next iteration
- prevColumnSeqId = columnSeqId;
+ // Renders the portalPage footer
+ screenStringRenderer.renderPortalPageEnd(writer, context, this);
+ } catch (IOException | GenericEntityException e) {
+ String errMsg = "Error rendering PortalPage with portalPageId [" + getId(context) + "]: " + e.toString();
+ Debug.logError(e, errMsg, MODULE);
+ throw new RuntimeException(errMsg);
}
- // Renders the portalPage footer
- screenStringRenderer.renderPortalPageEnd(writer, context, this);
- } catch (IOException | GenericEntityException e) {
- String errMsg = "Error rendering PortalPage with portalPageId [" + getId(context) + "]: " + e.toString();
- Debug.logError(e, errMsg, MODULE);
- throw new RuntimeException(errMsg);
+ } else {
+ String errMsg = "Error rendering PortalPage, it's null";
+ Debug.logError(errMsg, MODULE);
}
}