diff --git a/gxweb/src/main/java/com/genexus/internet/HttpAjaxContext.java b/gxweb/src/main/java/com/genexus/internet/HttpAjaxContext.java index e534dcb36..2af59c06c 100644 --- a/gxweb/src/main/java/com/genexus/internet/HttpAjaxContext.java +++ b/gxweb/src/main/java/com/genexus/internet/HttpAjaxContext.java @@ -746,7 +746,7 @@ private boolean checkFileExists(String fileName) boolean fileExists = false; try { - fileExists = ApplicationContext.getInstance().checkIfResourceExist(getDefaultPath() + staticContentBase + fileName); + fileExists = ApplicationContext.getInstance().checkIfResourceExist(getDefaultPath() + staticContentBase + fileName); } catch (Exception e) { @@ -886,18 +886,22 @@ public void ajax_rsp_assign_sdt_attri( String CmpContext, boolean IsMasterPage, { try { JSONObjectWrapper obj = getGxObject(AttValues, CmpContext, IsMasterPage); - if (obj != null && (!isUndefinedOutParam( AttName, SdtObj) || dynAjaxEventContext.isParmModified(AttName, SdtObj))) - { - if (SdtObj instanceof IGxJSONAble) - obj.put(AttName, ((IGxJSONAble)SdtObj).GetJSONObject()); - else - { - if (SdtObj.getClass().isArray()) - { - obj.put(AttName, ObjArrayToJSONArray(SdtObj)); - } - } - } + if (obj != null) { + if (SdtObj instanceof com.genexus.util.GXHashMap) { + obj.put(AttName, ((com.genexus.util.jsonsableHash) SdtObj).toJson()); + } + else { + if ((!isUndefinedOutParam(AttName, SdtObj) || dynAjaxEventContext.isParmModified(AttName, SdtObj))) { + if (SdtObj instanceof IGxJSONAble) + obj.put(AttName, ((IGxJSONAble) SdtObj).GetJSONObject()); + else { + if (SdtObj.getClass().isArray()) { + obj.put(AttName, ObjArrayToJSONArray(SdtObj)); + } + } + } + } + } } catch (JSONException e) { logger.error(String.format("Could not serialize Object '%s' to JSON", AttName), e); diff --git a/gxweb/src/main/java/com/genexus/webpanels/GXWebPanel.java b/gxweb/src/main/java/com/genexus/webpanels/GXWebPanel.java index 80c6db315..581c7499d 100644 --- a/gxweb/src/main/java/com/genexus/webpanels/GXWebPanel.java +++ b/gxweb/src/main/java/com/genexus/webpanels/GXWebPanel.java @@ -770,47 +770,41 @@ private void SetFieldValue(Object targetObj, String fieldName, Object value) thr if (field != null) { Class fieldType = field.getType(); - if (IGxJSONSerializable.class.isAssignableFrom(field.getType())) - { - Class[] cArg = new Class[1]; - cArg[0] = String.class; - Object fieldInstance = PrivateUtilities.getFieldValue(targetObj, fieldName); - Method mth; - if (value instanceof JSONArray || value instanceof JSONObjectWrapper) - { - mth = field.getType().getMethod("FromJSONObject", new Class[]{Object.class}); - mth.invoke(fieldInstance , new Object[]{value}); - } - else - { - mth = field.getType().getMethod("fromJSonString", cArg); - mth.invoke(fieldInstance , new Object[]{value.toString()}); - } - - PrivateUtilities.setFieldValue(targetObj, field.getName(), fieldInstance); + Object fieldInstance = PrivateUtilities.getFieldValue(targetObj, fieldName); + Method mth; + if (com.genexus.util.GXHashMap.class.isAssignableFrom(field.getType())) { + mth = field.getType().getMethod("fromJson", new Class[]{Object.class}); + mth.invoke(fieldInstance, new Object[]{value}); } - else - { - try - { - if (fieldType.isArray()) - { - Object tempArray = getArrayFieldValue(fieldType, value); - if (tempArray != null) - { - value = tempArray; - } + else { + if (IGxJSONSerializable.class.isAssignableFrom(field.getType())) { + Class[] cArg = new Class[1]; + cArg[0] = String.class; + if (value instanceof JSONArray || value instanceof JSONObjectWrapper) { + mth = field.getType().getMethod("FromJSONObject", new Class[]{Object.class}); + mth.invoke(fieldInstance, new Object[]{value}); + } else { + mth = field.getType().getMethod("fromJSonString", cArg); + mth.invoke(fieldInstance, new Object[]{value.toString()}); } - else { - if (fieldType == java.util.Date.class) - value = localUtil.ctot(value.toString(), 0); - else - value = GXutil.convertObjectTo(value, fieldType); + + PrivateUtilities.setFieldValue(targetObj, field.getName(), fieldInstance); + } else { + try { + if (fieldType.isArray()) { + Object tempArray = getArrayFieldValue(fieldType, value); + if (tempArray != null) { + value = tempArray; + } + } else { + if (fieldType == java.util.Date.class) + value = localUtil.ctot(value.toString(), 0); + else + value = GXutil.convertObjectTo(value, fieldType); + } + PrivateUtilities.setFieldValue(targetObj, field.getName(), value); + } catch (Exception e) { } - PrivateUtilities.setFieldValue(targetObj, field.getName(), value); - } - catch (Exception e) - { } } } diff --git a/java/src/main/java/com/genexus/util/jsonsableHash.java b/java/src/main/java/com/genexus/util/jsonsableHash.java new file mode 100644 index 000000000..3c8348573 --- /dev/null +++ b/java/src/main/java/com/genexus/util/jsonsableHash.java @@ -0,0 +1,6 @@ +package com.genexus.util; + +public interface jsonsableHash { + public String toJson(); + public void fromJson(String json); +}