0
votes

I have a custom control which contains a comboBox. One property of the CC is default value, which I want the developer to be able to pick in the Xpage.

Static values pass into the CC fine, but if I try to default the value, it fails. I would like to default the default property to the current user, but it cannot.

This is the custom control on an the Xpage. I can return a name statically and it works, but if I compute the name it doesn't work.

<xc:cc_commonfieldselect2fromcache 
  datasource="#{javascript:return Ticket}" 
  cacheitem="employees" 
  fieldname="tckReqs" 
  fieldlabel="Requester">
<xc:this.defaultvalue>
 <![CDATA[#{javascript:var usrNme:String = ("[CN]",session.getEffectiveUserName());
       return usrNme;
       //return "Bryan S Schmiedeler";}]]>
</xc:this.defaultvalue>
</xc:cc_commonfieldselect2fromcache>

Here is part of the custom control: I am trying to pass in the compositeData.defaultValue that was set above. If I hard code it it works, otherwise it doesn't.

        <xp:comboBox
            id="${javascript:compositeData.fieldName}"
            value="#{compositeData.dataSource[compositeData.fieldName]}"
            defaultValue="${javascript:compositeData.defaultValue}">
            <xp:selectItems
                value="${javascript:'#{CacheBean.'+compositeData.cacheItem+'}'}">
            </xp:selectItems>
        </xp:comboBox>

Here is how I have set the property in the custom control:

enter image description here

2

2 Answers

2
votes

Your code used the defaultValue (inside your cc) before it was stored into your cc´s compositeData.

${} => computed a single time on pageload (and before all dynamically computed) 
#{} => dynamically computed

You have 2 options

  1. set your cc defaultValue to dynamically computed (#)
  2. provide the defaultValue also on pageload ($)
1
votes

In your code you compute the default value at "load time":

defaultValue="${javascript:compositeData.defaultValue}"

while you need to compute it at runtime:

defaultValue="#{javascript:compositeData.defaultValue}"

that should do the trick