2015-02-23 73 views
0

我組裝這段代碼從零部件各地的XPages社區,你可能認識的幾個:搜索中使用XPages事件參數

var submitId= param.get('$$xspsubmitid'); 
var component:com.ibm.xsp.component.xp.XspEventHandler= PageData.getComponentByClientId(submitId, view); 
dprint("id= " + component.getClass().toString()) 
var params= component.getParameters(); 
for(var x:com.ibm.xsp.complex.Parameter in params) { 
    dprint(x); 
    dprint(x.getName()); 
    dprint(x.getValue()); 
} 

PageData是一個託管bean,並getComponentByClientId不正是它說;它的代碼,爲了完整性:

public UIComponent getComponentByClientId(String id, UIComponent root) { 
    UIComponent component= new XspQuery().byClientId(id, root); 
    return component; 

} 

至於XspQuery:

package org.openntf.xsp.extlib.query; 

我想找到觸發部分更新當前字段的名稱和形式,它是英寸這兩個元素,字段和表單都是我的應用程序的內部。他們的名字被放在了兩個事件參數,就像這樣:

<xp:this.parameters> 
    <xp:parameter name="formName" value="#{javascript:compositeData.formName}"></xp:parameter> 
    <xp:parameter name="fieldName" value="#{javascript:compositeData.fieldName}"></xp:parameter> 
</xp:this.parameters> 

的問題是:當我在頁面事件afterRestoreView,beforeRenderResponse或afterRenderResponse,參數的名稱是正確打印的一個把這個代碼,但對getValue()的調用永遠不會返回任何東西!更準確地說:代碼的執行停止了,我還不知道確切的錯誤(我承認這並不完全準確)。

如何獲取這些參數?

TIA!

+0

我有點困惑:你的*字段*如何進行部分刷新? – 2015-02-23 12:37:15

+0

我可以建議的最好的事情是通過調試確認,使用$$ xspsubmitid確實會爲您提供觸發事件的組件的eventHandler。我認爲submitId實際上是HTML表單的ID,而不是觸發刷新的組件,儘管我可能是錯的。此外,綁定動態可能無法在restoreView中工作。 – 2015-02-23 13:24:11

+0

@Sven:我的領域就像一個廣播組,複選框,下拉列表等,可以觸發部分刷新。所有字段都是動態創建的,它們的定義在Notes文檔中,並且它們一起用作表單。在頁面上可以有多種表單,我想知道哪些表單觸發了刷新(因此我不必重新計算其他表單上的字段)。 – 2015-02-23 16:37:34

回答

0

查看Mastering XPages中的代碼,在eventHandler的SSJS代碼中訪問eventHandler參數值的方法僅僅是將name屬性作爲變量引用。例如print(formName + ": " + fieldName)

+0

我想要以避免每種類型的字段(收音機,複選框)額外的代碼,但我願意嘗試。我會讓你知道我得到了什麼結果。 – 2015-02-23 16:48:28

+0

瞧,看來......這似乎工作,它打印形式和字段名稱。根據我的日誌記錄,事件在afterRestoreView之後和beforeRenderResponse事件之前執行。我想當我試圖從其他地方得到它時,價值就不在那裏了。我將向PageData bean添加一些代碼,以便它「知道」我在哪裏。 – 2015-02-23 17:20:07