2015-02-23 4 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 является управляемым компонентом, и 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

Я немного смущен: как ваши * поля * делают частичное обновление? –

+0

Лучшее, что я могу предложить, это подтвердить с помощью отладки, что использование $$ xspsubmitid действительно дает вам eventHandler компонента, который запускает событие. Я думаю, что submitId на самом деле является идентификатором HTML-формы, а не компонентом, запускающим обновление, хотя я могу ошибаться. Кроме того, динамическая привязка, вероятно, не будет работать в restoreView. –

+0

@Sven: мои поля похожи на группы радио, флажки, выпадающие списки и т. Д., Которые могут вызвать частичное обновление. Все поля динамически создаются, их определение находится внутри документа Notes, и вместе они действуют как форма. На странице может быть несколько форм, и я хочу знать, какая из форм вызвала обновление (поэтому мне не нужно перепрограммировать поля в других формах). –

ответ

0

Рассматривая код в режиме мастеринга XPages, способ доступа к значению параметра eventHandler в коде SSJS eventHandler является ссылкой на свойство name как переменную. например print(formName + ": " + fieldName)

+0

Я хотел чтобы избежать дополнительного кода на тип поля (радио, флажок), но я готов попробовать. Я дам вам знать, какие результаты я получу. –

+0

Lo and behold ... Кажется, что это работает, оно печатает имена форм и полей. Согласно моему протоколу, событие выполняется после afterRestoreView и перед событиями beforeRenderResponse. Я полагаю, что ценность просто не существует, когда я пытаюсь ее получить из других источников. Я добавлю код в компонент PageData, чтобы он «знал», где я нахожусь. –

Смежные вопросы