Hi,

When using new common container to render gadget, the ifr request url will
be from gadget metadata request. At the back end, method makeRenderingUri()
will be called on DefaultIframeUriManager class to generate the ifr url. In
this method, there are following code snippet to add default user prefs into
url.

    // Add all UserPrefs
    UserPrefs prefs = context.getUserPrefs();
    for (UserPref up : gadget.getSpec().getUserPrefs().values()) {
      String name = up.getName();
      String data = prefs.getPref(name);
      if (data == null) {
        data = up.getDefaultValue();
      }

      boolean upInFragment = !view.needsUserPrefSubstitution();
      addParam(uri, UriCommon.USER_PREF_PREFIX + up.getName(), data, useTpl,
upInFragment);
    }

Such as if gadget spec xml defined a pref named "mycolor" with default value
"Green", but the addParam method will change the "mycolor" value to
"%up_mycolor%" because useTpl is true. Thus, ifr url will be requested with
all invalid user prefs values. And when you try to get some default value
from user prefs, it return invalid value.

I created a simple patch to change useTpl to false, which could solve this
issue.

JIRA: https://issues.apache.org/jira/browse/SHINDIG-1465
code review: http://codereview.appspot.com/2977041/

Reply via email to