2017-03-22 48 views
0

我有一个包含组合框的自定义控件。 CC的一个属性是默认值,我希望开发人员能够在Xpage中选择。Xpages:无法在自定义控件中计算属性“defaultValue”

静态值进入CC罚款,但如果我尝试默认值,它失败。我想将默认属性默认为当前用户,但它不能。

这是Xpage上的自定义控件。我可以静态返回一个名称并且它可以工作,但是如果我计算它的名称则不起作用。

<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> 

这是自定义控件的一部分:我试图传入上面设置的compositeData.defaultValue。如果我硬编码它可以工作,否则它不会。

 <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> 

这里是我如何在自定义控制设置该属性:

enter image description here

回答

1

在你的代码计算在 “加载时间” 的默认值:

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

虽然您需要在运行时计算它:

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

应该做的伎俩

+0

斯蒂芬,这是有道理的,但我试了一下,但没有奏效。如果我选择“使用静态值”并在“Bryan S”之类的东西中运行,那么它就可以工作。但是,如果我计算了任何东西,那么它就不起作用。即使我在ssjs框中放回“Bryan”。然后没有出现。我试着制作一个只是一个组合框的cc,没有select2,我仍然无法计算属性。 –

+0

我犯了一个不同的错误。当我解决了如何以Java保存数据时,您的更改工作得很好。谢谢 –

2

你的代码中使用的默认值(你的CC内),然后将其保存到您的cc's的CompositeData。

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

您有2个选项

  1. 设置你的CC默认值来动态计算(#)
  2. 提供的默认值也页面加载($)
+0

我不明白你的第一句话吗?你可以稍微扩展一下。 –

+0

我做到了。只需改变你的代码,像斯维塞尔说的。我只是想添加第二个选项来解决问题。 –

+1

我犯了一个不同的错误。当我解决了如何以Java保存数据时,您的更改工作得很好。现在切换到#(运行时)解决了我的问题。感谢您的帮助。 –