2012-03-28 6 views
2

У меня есть несколько полей на моем Notes DocumentДинамическое связывание данных?

FieldA_1 FieldA_2 FieldA_3 FieldA_4

FieldB_1 FieldB_2 FieldB_3 FieldB_4

На составного элемента управления У меня есть 2 поля редактирования FieldA FieldB

У меня есть compositeData.ATM_NU M определил пользовательский элемент управления, который является выпадающим списком со значениями 1,2,3,4.

Как связать поля редактирования моего элемента управления с соответствующими полями документов, используя имеющиеся составные данные?

Например, я хотел сделать что-то вроде: "FieldA _" + compositeData.ATM_NUM.

Я попробовал яваскрипта решение в этой теме:

Binding an edit box within a custom control to a form field programatically

Но это не похоже на работу.

ответ

11

Попробуйте следующее в качестве значения, например. Поле A:

<xp:inputText value="#{document['FieldA'+compositeData.ATM_NUM]}" /> 

Вы также можете расширить свойства пользовательского элемента управления, чтобы включить имя целого поля (и, таким образом, например, «передать FieldA_1» в пользовательский элемент управления). Тогда вы должны быть в состоянии сделать следующее:

<xp:inputText value="#{document[compositeData.fieldName]}" /> 
+3

Вы также можете проверить это объяснение техника Per рекомендует: http://stackoverflow.com/questions/9719778/xpages-more-fields-unlimited-at-the-click-of-a-button/9720793#9720793 –

+0

Я попробовал value = "# {document1 [CMBUExistTermID + compositeData.ATM_NUM]} ", но я получил ошибку. Я собираюсь попробовать полевые вещи, но лучше избегаю этого, если смогу. Я хотел бы выяснить, как это сделать только с моим составным полем «число». –

+0

Также попытался значение value = "# {document1 ['CMBUExistTermID' + '4']}", которое дает ошибку Исключено, пытаясь преобразовать String "CMBUExistTermID", чтобы набрать "java.lang.Double", но alue = "# {document1 ['CMBUExistTermID4']} «отлично работает. –

5

Проблема связана с тем, что составные данные готовы к использованию. В начале он оценивает значение «0», когда ваш пользовательский элемент управления готов.

Попробуйте это:

<xp:inputText id="inputText1" 
      value="${javascript:'#{document1.SomeField'+compositeData.SomeParam+'}'}"> 
</xp:inputText> 

Это важно использовать "$" знак есть. Он создаст привязку к SomeField1, SomeField2 и т. Д. В зависимости от SomeParam.

+0

Спасибо Сердар, я пробовал это, но это не сработало. Никакие ошибки или что-то просто не заполнили поле, как ожидалось. Вот фактическая формула, которую я использовал. value = "$ {javascript: '# {document1.CMBUAction' + compositeData.ATM_NUM + '}'}"> –

+0

ОК, где определяется документ1? Внутри CC или в XPage? –

+0

Я говорил слишком рано. Он работает отлично. Какова цель $? Любое из этого документировано где-нибудь? –

5

Пример для связывания данных для пользовательского элемента управления заключается в следующем:

Создание пользовательского элемента управления, добавить 2 пользовательские свойства: BindTo (String), canEdit (Boolean). Довольно часто вам нужно иметь поле только для чтения, основанное на состоянии вашей бизнес-логики, а не на том, что остальные находятся в режиме редактирования.

<xp:listBox id="listBox1" 
     rendered="#{compositeData.canEdit}"> 
     <xp:this.value><![CDATA[${javascript:"#{"+compositeData.BindTo+"}"}]]></xp:this.value> 
     <xp:selectItem itemLabel="red"></xp:selectItem> 
     <xp:selectItem itemLabel="blue"></xp:selectItem> 
     <xp:selectItem itemLabel="green"></xp:selectItem> 
</xp:listBox> 
<xp:text id="textForListbox" 
     rendered="#{!compositeData.canEdit}"> 
     <xp:this.value><![CDATA[${javascript:"#{"+compositeData.BindTo+"}"}]]></xp:this.value> 
</xp:text> 

Преимущества этого подхода (с использованием ${javascript:"#{"+compositeData.BindTo+"}"}) является то, что вы можете связать этот контроль ни к чему: документ, переменному объем, боб и т.д.

+0

ура. в первый раз я видел, как делать динамическую привязку к чему-то другому, кроме документа. очень полезно –

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