Author: jleroux Date: Tue Mar 10 13:37:26 2015 New Revision: 1665543 URL: http://svn.apache.org/r1665543 Log: Fixes <<"Lookup fields break when used with a form having skip-start="true">> https://issues.apache.org/jira/browse/OFBIZ-6139
We neglected this aspect so far, adding a "form-name" attribute to the lookup element fixes it. You then need also to set the correct id-name value on field element. Modified: ofbiz/branches/release13.07/framework/widget/dtd/widget-form.xsd ofbiz/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java ofbiz/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java Modified: ofbiz/branches/release13.07/framework/widget/dtd/widget-form.xsd URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/framework/widget/dtd/widget-form.xsd?rev=1665543&r1=1665542&r2=1665543&view=diff ============================================================================== --- ofbiz/branches/release13.07/framework/widget/dtd/widget-form.xsd (original) +++ ofbiz/branches/release13.07/framework/widget/dtd/widget-form.xsd Tue Mar 10 13:37:26 2015 @@ -679,6 +679,7 @@ under the License. <xs:restriction base="xs:token"> <xs:enumeration value="timestamp" /> <xs:enumeration value="date" /> + <xs:enumeration value="date-fix" /> <xs:enumeration value="time" /> </xs:restriction> </xs:simpleType> @@ -1076,6 +1077,13 @@ 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/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java?rev=1665543&r1=1665542&r2=1665543&view=diff ============================================================================== --- ofbiz/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java (original) +++ ofbiz/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java Tue Mar 10 13:37:26 2015 @@ -50,6 +50,7 @@ import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.string.FlexibleStringExpander; import org.ofbiz.base.util.template.FreeMarkerWorker; import org.ofbiz.entity.Delegator; +import org.ofbiz.entity.util.EntityUtilProperties; import org.ofbiz.webapp.control.RequestHandler; import org.ofbiz.webapp.taglib.ContentUrlTag; import org.ofbiz.widget.ModelWidget; @@ -637,6 +638,11 @@ public class MacroFormRenderer implement formattedMask = "9999-99-99 99:99:99"; } } + Delegator delegator = (Delegator) request.getAttribute("delegator"); + String timeFormat = ""; + if (UtilValidate.isNotEmpty(delegator)) { + timeFormat = EntityUtilProperties.getPropertyValue("general", "displayTimeFormat", delegator); + } StringWriter sr = new StringWriter(); sr.append("<@renderDateTimeField "); sr.append("name=\""); @@ -701,6 +707,8 @@ public class MacroFormRenderer implement sr.append(formName); sr.append("\" mask=\""); sr.append(formattedMask); + sr.append("\" timeFormat=\""); + sr.append(timeFormat); sr.append("\" />"); executeMacro(writer, sr.toString()); this.addAsterisks(writer, context, modelFormField); @@ -1870,7 +1878,7 @@ public class MacroFormRenderer implement int size = 25; int maxlength = 30; String dateType = dateFindField.getType(); - if ("date".equals(dateType)) { + if ("date".equals(dateType) || "date-fix".equals(dateType)) { size = maxlength = 10; if (uiLabelMap != null) { localizedInputTitle = uiLabelMap.get("CommonFormatDate"); @@ -1912,6 +1920,10 @@ public class MacroFormRenderer implement if (UtilValidate.isNotEmpty(modelFormField.getTitleStyle())) { titleStyle = modelFormField.getTitleStyle(); } + + Delegator delegator = (Delegator)context.get("delegator"); + String defaultDateFormat = EntityUtilProperties.getPropertyValue("general.properties", "displayDateFindFormat", "yy-mm-dd", delegator); + StringWriter sr = new StringWriter(); sr.append("<@renderDateFindField "); sr.append(" className=\""); @@ -1962,6 +1974,8 @@ public class MacroFormRenderer implement sr.append(opUpThruDay); sr.append("\" opIsEmpty=\""); sr.append(opIsEmpty); + sr.append("\" defaultDateFormat=\""); + sr.append(defaultDateFormat); sr.append("\" />"); executeMacro(writer, sr.toString()); this.appendTooltip(writer, context, modelFormField); @@ -2019,7 +2033,10 @@ public class MacroFormRenderer implement boolean readonly = lookupField.readonly; // add lookup pop-up button String descriptionFieldName = lookupField.getDescriptionFieldName(); - String formName = modelFormField.getModelForm().getCurrentFormName(context); + String formName = lookupField.getParentFormName(); + if (UtilValidate.isEmpty(formName)) { + formName = modelFormField.getModelForm().getCurrentFormName(context); + } StringBuilder targetParameterIter = new StringBuilder(); StringBuilder imgSrc = new StringBuilder(); // FIXME: refactor using the StringUtils methods Modified: ofbiz/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java?rev=1665543&r1=1665542&r2=1665543&view=diff ============================================================================== --- ofbiz/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java (original) +++ ofbiz/branches/release13.07/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java Tue Mar 10 13:37:26 2015 @@ -63,6 +63,7 @@ import org.ofbiz.entity.model.ModelEntit import org.ofbiz.entity.model.ModelField; import org.ofbiz.entity.model.ModelReader; import org.ofbiz.entity.util.EntityUtil; +import org.ofbiz.entity.util.EntityUtilProperties; import org.ofbiz.service.DispatchContext; import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.ModelParam; @@ -2002,19 +2003,14 @@ public class ModelFormField { throw new IllegalArgumentException(errMsg); } } else if ("date".equals(this.type) && retVal.length() > 10) { - Locale locale = (Locale) context.get("locale"); - if (locale == null) { - locale = Locale.getDefault(); - } - StringToTimestamp stringToTimestamp = new DateTimeConverters.StringToTimestamp(); Timestamp timestamp = null; try { timestamp = stringToTimestamp.convert(retVal); Date date = new Date(timestamp.getTime()); - - DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.SHORT, locale); - retVal = dateFormatter.format(date); + Delegator delegator = (Delegator)context.get("delegator"); + String displayDateFormat = EntityUtilProperties.getPropertyValue("general.properties", "displayDateFormat", "dd-MM-yyyy", delegator); + retVal = UtilDateTime.toDateString(date, displayDateFormat); } catch (ConversionException e) { String errMsg = "Error formatting date using default instead [" + retVal + "]: " + e.toString(); @@ -2024,23 +2020,14 @@ public class ModelFormField { } } else if ("date-time".equals(this.type) && retVal.length() > 16) { - Locale locale = (Locale) context.get("locale"); - TimeZone timeZone = (TimeZone) context.get("timeZone"); - if (locale == null) { - locale = Locale.getDefault(); - } - if (timeZone == null) { - timeZone = TimeZone.getDefault(); - } - StringToTimestamp stringToTimestamp = new DateTimeConverters.StringToTimestamp(); Timestamp timestamp = null; try { timestamp = stringToTimestamp.convert(retVal); Date date = new Date(timestamp.getTime()); - - DateFormat dateFormatter = UtilDateTime.toDateTimeFormat(null, timeZone, locale); - retVal = dateFormatter.format(date); + Delegator delegator = (Delegator)context.get("delegator"); + String displayDateTimeFormat = EntityUtilProperties.getPropertyValue("general.properties", "displayDateTimeFormat", "dd-MM-yyyy HH:mm:ss.SSS", delegator); + retVal = UtilDateTime.toDateString(date, displayDateTimeFormat); } catch (ConversionException e) { String errMsg = "Error formatting date/time using default instead [" + retVal + "]: " + e.toString(); @@ -3525,6 +3512,7 @@ public class ModelFormField { public static class LookupField extends TextField { protected FlexibleStringExpander formName; + protected String parentFormName; protected String descriptionFieldName; protected String targetParameter; protected String lookupPresentation; @@ -3538,6 +3526,7 @@ public class ModelFormField { public LookupField(Element element, ModelFormField modelFormField) { super(element, modelFormField); this.formName = FlexibleStringExpander.getInstance(element.getAttribute("target-form-name")); + this.parentFormName = element.getAttribute("form-name"); this.descriptionFieldName = element.getAttribute("description-field-name"); this.targetParameter = element.getAttribute("target-parameter"); this.lookupPresentation = element.getAttribute("presentation"); @@ -3567,6 +3556,10 @@ public class ModelFormField { return this.formName.expandString(context); } + public String getParentFormName() { + return this.parentFormName; + } + public List<String> getTargetParameterList() { List<String> paramList = FastList.newInstance(); if (UtilValidate.isNotEmpty(this.targetParameter)) {