Hi Nicolas, Thanks for your input. I’ll work on a better approach to implement this feature.
-- Thanks & Regards, Mridul Pathak > On Oct 18, 2016, at 5:31 PM, Nicolas Malin <[email protected]> wrote: > > Hi Mridul, > > I like the idea on this commit but I see two problems. > > * The modification on ModelForm break the threadsafe set by adrian. If I > understand what he did, the boolean hideHeader should be rest final, and you > don't update the ModelForm during the treatment. To improve it, insteade of > *if (!modelForm.getHideHeader()) {* use more *if (!modelForm.getHideHeader() > && !elementOnList) {* . After this isn't a good solution to use > getHideHeader() to display the message "no element found" because if I create > a form without header to display and only the list, :) I'm going to blame you > ! > > * The message isn't call a flexibleStringExpander so you can't use > translation and the default label need to use a common label. > > Nicolas > > Le 15/10/2016 à 15:19, [email protected] a écrit : >> Author: mridulpathak >> Date: Sat Oct 15 13:19:35 2016 >> New Revision: 1765058 >> >> URL: http://svn.apache.org/viewvc?rev=1765058&view=rev >> Log: >> Improved: In form widgets of list type empty header row should not render if >> list to render in file is empty. >> (OFBIZ-7598) >> >> Thanks: Suraj Khurana for contribution. >> >> Modified: >> ofbiz/trunk/framework/widget/dtd/widget-form.xsd >> >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java >> >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java >> >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java >> >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java >> ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl >> >> Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-form.xsd?rev=1765058&r1=1765057&r2=1765058&view=diff >> ============================================================================== >> --- ofbiz/trunk/framework/widget/dtd/widget-form.xsd (original) >> +++ ofbiz/trunk/framework/widget/dtd/widget-form.xsd Sat Oct 15 13:19:35 2016 >> @@ -86,6 +86,7 @@ under the License. >> <xs:attribute name="style" type="xs:string" /> >> <xs:attribute name="focus-field-name" type="xs:string" /> >> <xs:attribute name="title" type="xs:string" /> >> + <xs:attribute name="empty-form-data-message" type="xs:string" /> >> <xs:attribute name="tooltip" type="xs:string" /> >> <xs:attribute name="list-name" type="xs:string"> >> <xs:annotation> >> @@ -327,6 +328,7 @@ under the License. >> <xs:attribute name="style" type="xs:string" /> >> <xs:attribute name="focus-field-name" type="xs:string" /> >> <xs:attribute name="title" type="xs:string" /> >> + <xs:attribute name="empty-form-data-message" type="xs:string" /> >> <xs:attribute name="tooltip" type="xs:string" /> >> <xs:attribute name="list-name" type="xs:string"> >> <xs:annotation> >> >> Modified: >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java?rev=1765058&r1=1765057&r2=1765058&view=diff >> ============================================================================== >> --- >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java >> (original) >> +++ >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java >> Sat Oct 15 13:19:35 2016 >> @@ -147,7 +147,7 @@ public abstract class ModelForm extends >> private final String formWidgetAreaStyle; >> private final boolean groupColumns; >> private final String headerRowStyle; >> - private final boolean hideHeader; >> + private boolean hideHeader; >> private final String itemIndexSeparator; >> private final List<String> lastOrderFields; >> private final String listEntryName; >> @@ -184,6 +184,7 @@ public abstract class ModelForm extends >> private final String targetType; >> private final FlexibleStringExpander targetWindowExdr; >> private final String title; >> + private final String emptyFormDataMessage; >> private final String tooltip; >> private final String type; >> private final boolean useRowSubmit; >> @@ -241,6 +242,13 @@ public abstract class ModelForm extends >> title = parentModel.title; >> } >> this.title = title; >> + String emptyFormDataMessage = >> formElement.getAttribute("empty-form-data-message"); >> + if (emptyFormDataMessage.isEmpty() && parentModel != null) { >> + emptyFormDataMessage = parentModel.emptyFormDataMessage; >> + } else if (emptyFormDataMessage.isEmpty()) { >> + emptyFormDataMessage = "No records found"; >> + } >> + this.emptyFormDataMessage = emptyFormDataMessage; >> String tooltip = formElement.getAttribute("tooltip"); >> if (tooltip.isEmpty() && parentModel != null) { >> tooltip = parentModel.tooltip; >> @@ -1015,6 +1023,10 @@ public abstract class ModelForm extends >> public boolean getHideHeader() { >> return this.hideHeader; >> } >> + public boolean setHideHeader(Boolean hideHeader) { >> + this.hideHeader = hideHeader; >> + return hideHeader; >> + } >> public String getItemIndexSeparator() { >> if (UtilValidate.isNotEmpty(this.itemIndexSeparator)) { >> @@ -1384,6 +1396,10 @@ public abstract class ModelForm extends >> return this.title; >> } >> + public String getEmptyFormDataMessage() { >> + return this.emptyFormDataMessage; >> + } >> + >> public String getTooltip() { >> return this.tooltip; >> } >> >> Modified: >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java?rev=1765058&r1=1765057&r2=1765058&view=diff >> ============================================================================== >> --- >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java >> (original) >> +++ >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java >> Sat Oct 15 13:19:35 2016 >> @@ -48,6 +48,7 @@ import org.apache.ofbiz.widget.model.*; >> import org.apache.ofbiz.widget.model.ModelForm.FieldGroup; >> import org.apache.ofbiz.widget.model.ModelForm.FieldGroupBase; >> import org.apache.ofbiz.widget.model.ModelFormField; >> +import org.apache.ofbiz.widget.model.ModelFormField.DisplayField; >> /** >> * A form rendering engine. >> @@ -925,9 +926,12 @@ public class FormRenderer { >> formStringRenderer.renderFormatListWrapperOpen(writer, context, >> modelForm); >> int numOfColumns = 0; >> + this.checkFormDataAndSetHeader(context); >> // ===== render header row ===== >> if (!modelForm.getHideHeader()) { >> numOfColumns = this.renderHeaderRow(writer, context); >> + } else { >> + formStringRenderer.renderEmptyFormDataMessage(writer, context, >> modelForm); >> } >> // ===== render the item rows ===== >> @@ -951,9 +955,12 @@ public class FormRenderer { >> formStringRenderer.renderFormatListWrapperOpen(writer, context, >> modelForm); >> int numOfColumns = 0; >> + this.checkFormDataAndSetHeader(context); >> // ===== render header row ===== >> if (!modelForm.getHideHeader()) { >> numOfColumns = this.renderHeaderRow(writer, context); >> + } else { >> + formStringRenderer.renderEmptyFormDataMessage(writer, context, >> modelForm); >> } >> // ===== render the item rows ===== >> @@ -967,6 +974,32 @@ public class FormRenderer { >> } >> + private void checkFormDataAndSetHeader(Map<String, Object> context) { >> + String lookupName = modelForm.getListName(); >> + Object obj = context.get(lookupName); >> + if (obj == null) { >> + if (Debug.verboseOn()) >> + Debug.logVerbose("No object for list or iterator name [" + >> lookupName + "] found, so not rendering rows.", module); >> + return; >> + } >> + // if list is empty, do not render rows >> + Iterator<?> iter = null; >> + if (obj instanceof Iterator<?>) { >> + iter = (Iterator<?>) obj; >> + } else if (obj instanceof List<?>) { >> + iter = ((List<?>) obj).listIterator(); >> + } >> + int itemIndex = -1; >> + Object item = null; >> + while ((item = safeNext(iter)) != null) { >> + itemIndex++; >> + break; >> + } >> + if (itemIndex < 0) { >> + modelForm.setHideHeader(true); >> + } >> + } >> + >> private void renderSingleFormString(Appendable writer, Map<String, >> Object> context, >> int positions) throws IOException { >> List<ModelFormField> tempFieldList = new >> LinkedList<ModelFormField>(); >> >> Modified: >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java?rev=1765058&r1=1765057&r2=1765058&view=diff >> ============================================================================== >> --- >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java >> (original) >> +++ >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java >> Sat Oct 15 13:19:35 2016 >> @@ -99,4 +99,5 @@ public interface FormStringRenderer { >> public void renderContainerFindField(Appendable writer, Map<String, >> Object> context, ModelFormField.ContainerField containerField) throws >> IOException; >> public void renderFieldGroupOpen(Appendable writer, Map<String, Object> >> context, ModelForm.FieldGroup fieldGroup) throws IOException; >> public void renderFieldGroupClose(Appendable writer, Map<String, >> Object> context, ModelForm.FieldGroup fieldGroup) throws IOException; >> + public void renderEmptyFormDataMessage(Appendable writer, Map<String, >> Object> context, ModelForm modelForm) throws IOException; >> } >> >> Modified: >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java?rev=1765058&r1=1765057&r2=1765058&view=diff >> ============================================================================== >> --- >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java >> (original) >> +++ >> ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java >> Sat Oct 15 13:19:35 2016 >> @@ -1538,7 +1538,16 @@ public final class MacroFormRenderer imp >> renderEndingBoundaryComment(writer, "Grid Widget - Grid >> Element", modelForm); >> } >> } >> - >> + >> + public void renderEmptyFormDataMessage(Appendable writer, Map<String, >> Object> context, ModelForm modelForm) throws IOException { >> + StringWriter sr = new StringWriter(); >> + sr.append("<@renderEmptyFormDataMessage"); >> + sr.append(" message=\""); >> + sr.append(modelForm.getEmptyFormDataMessage()); >> + sr.append("\" />"); >> + executeMacro(writer, sr.toString()); >> + } >> + >> public void renderFormatHeaderOpen(Appendable writer, Map<String, >> Object> context, ModelForm modelForm) throws IOException { >> StringWriter sr = new StringWriter(); >> sr.append("<@renderFormatHeaderOpen "); >> >> Modified: ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl?rev=1765058&r1=1765057&r2=1765058&view=diff >> ============================================================================== >> --- ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl >> (original) >> +++ ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl Sat Oct >> 15 13:19:35 2016 >> @@ -326,6 +326,10 @@ under the License. >> </label><#t/> >> </#macro> >> +<#macro renderEmptyFormDataMessage message> >> + <h3><#if message?has_content>${message}</#if></h3> >> +</#macro> >> + >> <#macro renderSingleFormFieldTitle></#macro> >> <#macro renderFormOpen linkUrl formType targetWindow containerId >> containerStyle autocomplete name viewIndexField viewSizeField viewIndex >> viewSize useRowSubmit> >> >> >> >
