2017-03-22 18 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保存數據時,您的更改工作得很好。現在切換到#(運行時)解決了我的問題。感謝您的幫助。 –