Author: jleroux Date: Thu Mar 19 14:38:37 2015 New Revision: 1667774 URL: http://svn.apache.org/r1667774 Log: Fixes <<You can't rely on Lookup field description-field-name attribute in a form having skip-start="true">> https://issues.apache.org/jira/browse/OFBIZ-6170
Instead of adding a form-name attribute only in lookup sub-element, I added it a the field level and removed the one at the lookup level.So the form-name field attribute can be used in the field of both the lookup and if needed the field set in the lookup description-field-name attribute. I only tested it in a version more near 13.07 but I believe it's ok here Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormFieldBuilder.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/renderer/macro/MacroFormRenderer.java Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-form.xsd?rev=1667774&r1=1667773&r2=1667774&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/dtd/widget-form.xsd (original) +++ ofbiz/trunk/framework/widget/dtd/widget-form.xsd Thu Mar 19 14:38:37 2015 @@ -912,6 +912,14 @@ under the License. </xs:documentation> </xs:annotation> </xs:attribute> + <xs:attribute type="xs:string" name="form-name"> + <xs:annotation> + <xs:documentation> + The name of the parent form, needed at least for lookups when using skip-start="true" + Must be set also on the related field if description-field-name is used + </xs:documentation> + </xs:annotation> + </xs:attribute> </xs:complexType> </xs:element> @@ -1317,13 +1325,6 @@ under the License. <xs:element minOccurs="0" ref="sub-hyperlink" /> </xs:sequence> <xs:attribute type="xs:string" name="target-form-name" use="required" /> - <xs:attribute type="xs:string" name="form-name"> - <xs:annotation> - <xs:documentation> - The name of the parent form, needed when using skip-start="true" along with correct id-name value on field - </xs:documentation> - </xs:annotation> - </xs:attribute> <xs:attribute type="xs:nonNegativeInteger" name="size" default="25" /> <xs:attribute type="xs:positiveInteger" name="maxlength" /> <xs:attribute type="xs:string" name="default-value" /> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java?rev=1667774&r1=1667773&r2=1667774&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java Thu Mar 19 14:38:37 2015 @@ -137,6 +137,7 @@ public class ModelFormField { private final FlexibleStringExpander useWhen; private final String widgetAreaStyle; private final String widgetStyle; + private final String parentFormName; private ModelFormField(ModelFormFieldBuilder builder) { this.action = builder.getAction(); @@ -187,6 +188,7 @@ public class ModelFormField { this.useWhen = builder.getUseWhen(); this.widgetAreaStyle = builder.getWidgetAreaStyle(); this.widgetStyle = builder.getWidgetStyle(); + this.parentFormName = builder.getParentFormName(); } public FlexibleStringExpander getAction() { @@ -398,8 +400,13 @@ public class ModelFormField { public String getIdName() { if (UtilValidate.isNotEmpty(idName)) return idName; - return this.modelForm.getName() + "_" + this.getFieldName(); - } + String parentFormName = this.getParentFormName(); + if (UtilValidate.isNotEmpty(parentFormName)) { + return parentFormName + "_" + this.getFieldName(); + } else { + return this.modelForm.getName() + "_" + this.getFieldName(); + } + } public Map<String, ? extends Object> getMap(Map<String, ? extends Object> context) { if (UtilValidate.isEmpty(this.mapAcsr)) @@ -643,6 +650,12 @@ public class ModelFormField { return this.modelForm.getDefaultWidgetStyle(); } + public String getParentFormName() { + if (UtilValidate.isNotEmpty(this.parentFormName)) + return this.parentFormName; + return ""; + } + /** * Checks if field is a row submit field. */ @@ -2761,7 +2774,6 @@ public class ModelFormField { private final String descriptionFieldName; private final String fadeBackground; private final FlexibleStringExpander formName; - private final String parentFormName; private final String initiallyCollapsed; private final String lookupHeight; private final String lookupPosition; @@ -2773,7 +2785,6 @@ public class ModelFormField { public LookupField(Element element, ModelFormField modelFormField) { super(element, modelFormField); this.descriptionFieldName = element.getAttribute("description-field-name"); - this.parentFormName = element.getAttribute("form-name"); this.fadeBackground = element.getAttribute("fade-background"); this.formName = FlexibleStringExpander.getInstance(element.getAttribute("target-form-name")); this.initiallyCollapsed = element.getAttribute("initially-collapsed"); @@ -2790,7 +2801,6 @@ public class ModelFormField { this.descriptionFieldName = ""; this.fadeBackground = ""; this.formName = FlexibleStringExpander.getInstance(""); - this.parentFormName = ""; this.initiallyCollapsed = ""; this.lookupHeight = ""; this.lookupPosition = ""; @@ -2805,7 +2815,6 @@ public class ModelFormField { this.descriptionFieldName = original.descriptionFieldName; this.fadeBackground = original.fadeBackground; this.formName = original.formName; - this.parentFormName = original.parentFormName; this.initiallyCollapsed = original.initiallyCollapsed; this.lookupHeight = original.lookupHeight; this.lookupPosition = original.lookupPosition; @@ -2870,10 +2879,6 @@ public class ModelFormField { return targetParameter; } - public String getParentFormName() { - return this.parentFormName; - } - public List<String> getTargetParameterList() { List<String> paramList = new LinkedList<String>(); if (UtilValidate.isNotEmpty(this.targetParameter)) { Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormFieldBuilder.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormFieldBuilder.java?rev=1667774&r1=1667773&r2=1667774&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormFieldBuilder.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormFieldBuilder.java Thu Mar 19 14:38:37 2015 @@ -104,6 +104,7 @@ public class ModelFormFieldBuilder { private FlexibleStringExpander useWhen = FlexibleStringExpander.getInstance("");; private String widgetAreaStyle = ""; private String widgetStyle = ""; + private String parentFormName = ""; public ModelFormFieldBuilder() { } @@ -152,6 +153,7 @@ public class ModelFormFieldBuilder { this.useWhen = FlexibleStringExpander.getInstance(fieldElement.getAttribute("use-when")); this.widgetAreaStyle = fieldElement.getAttribute("widget-area-style"); this.widgetStyle = fieldElement.getAttribute("widget-style"); + this.parentFormName = fieldElement.getAttribute("form-name"); Element childElement = null; List<? extends Element> subElements = UtilXml.childElementList(fieldElement); for (Element subElement : subElements) { @@ -255,6 +257,7 @@ public class ModelFormFieldBuilder { this.useWhen = modelFormField.getUseWhen(); this.widgetAreaStyle = modelFormField.getWidgetAreaStyle(); this.widgetStyle = modelFormField.getWidgetStyle(); + this.parentFormName = modelFormField.getParentFormName(); } public ModelFormFieldBuilder(ModelFormFieldBuilder builder) { @@ -294,6 +297,7 @@ public class ModelFormFieldBuilder { this.useWhen = builder.getUseWhen(); this.widgetAreaStyle = builder.getWidgetAreaStyle(); this.widgetStyle = builder.getWidgetStyle(); + this.parentFormName = builder.getParentFormName(); } public ModelFormFieldBuilder addOnChangeUpdateArea(UpdateArea onChangeUpdateArea) { @@ -458,6 +462,10 @@ public class ModelFormFieldBuilder { return widgetStyle; } + public String getParentFormName() { + return this.parentFormName; + } + private boolean induceFieldInfo(ModelForm modelForm, String defaultFieldType, ModelReader entityModelReader, DispatchContext dispatchContext) { if (induceFieldInfoFromEntityField(defaultFieldType, entityModelReader)) return true; @@ -716,6 +724,8 @@ public class ModelFormFieldBuilder { this.titleStyle = builder.getTitleStyle(); if (UtilValidate.isNotEmpty(builder.getWidgetStyle())) this.widgetStyle = builder.getWidgetStyle(); + if (UtilValidate.isNotEmpty(builder.getParentFormName())) + this.parentFormName = builder.getParentFormName(); if (UtilValidate.isNotEmpty(builder.getRedWhen())) this.redWhen = builder.getRedWhen(); if (UtilValidate.isNotEmpty(builder.getEvent())) @@ -918,4 +928,8 @@ public class ModelFormFieldBuilder { this.widgetStyle = widgetStyle; return this; } + public ModelFormFieldBuilder setParentFormName(String parentFormName) { + this.parentFormName = parentFormName; + return this; + } } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/renderer/macro/MacroFormRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/renderer/macro/MacroFormRenderer.java?rev=1667774&r1=1667773&r2=1667774&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/renderer/macro/MacroFormRenderer.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/renderer/macro/MacroFormRenderer.java Thu Mar 19 14:38:37 2015 @@ -2068,7 +2068,7 @@ public final class MacroFormRenderer imp // add lookup pop-up button String descriptionFieldName = lookupField.getDescriptionFieldName(); ModelForm modelForm = modelFormField.getModelForm(); - String formName = lookupField.getParentFormName(); + String formName = modelFormField.getParentFormName(); if (UtilValidate.isEmpty(formName)) { formName = FormRenderer.getCurrentFormName(modelForm, context); }