2012-03-14 2 views
1

У меня есть два настраиваемых элемента управления: CustomControlBody и CustomControlTitle.Передача значения компонента из одного настраиваемого элемента управления в другой

Пользовательский переключатель ControlCode имеет переключатель. У CustomControlTitle есть вычисленное поле, основанное на значении переключателя в CustomControlBody.

Если CustomControlTitle помещен в CustomControlBody, то вычисленное поле в CustomControlTitle может видеть значение переключателя на CustomControlBody просто отлично.

Но для гибкости конструкции я хочу иметь возможность отдельно размещать CustomControlTitle и CustomControlBody на xPage. Но когда я это делаю, CustomControlTitle, похоже, не может видеть переключатель в CustomControlBody.

Как передать значение переключателя в CustomControlBody для вычисленной записи в CustomControlTitle?

ответ

4

Вы можете использовать viewcope для установки параметра, и при обновлении вы можете прочитать этот var. Другим способом было бы создать пользовательский заголовок управления и тело с гранью (область редактирования). Вы создаете третий элемент управления, в который вы помещаете эти элементы управления и заполняете грани с помощью радиообъекта и текстового поля. Что-то вроде (это не готовый к производству конечно это просто для иллюстрации выше ..)

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" 
    xmlns:xc="http://www.ibm.com/xsp/custom" 
    xmlns:xe="http://www.ibm.com/xsp/coreex"> 

    <xp:this.data> 
     <xp:dominoDocument var="yourdocument" action="editDocument" 
      documentId="#{javascript:return compositeData.DocumentUniqueID;}" 
      computeWithForm="save" formName="yourdocument"> 
     </xp:dominoDocument> 
    </xp:this.data> 


    <xp:panel> 

    <xc:Title> 
     <xp:textxp:key="field" value="#{javascript: rb = getComponent("radiobutton"); return cb.getValue();}"/> 
    </xc:Title> 
    <xc:Body> 

    <xp:radioGroup id="radioGroup1" xp:key="fields"> 
     <xp:eventHandler event="onchange" submit="true" 
      refreshMode="partial" refreshId="titleControl"> 
      <xp:this.action><![CDATA[#{javascript:viewScope.value = this.getValue();}]]></xp:this.action> 
     </xp:eventHandler></xp:radioGroup> 
    </xc:Body> 

</xp:panel> 

</xp:view> 
+0

Спасибо. Похоже, viewScope это путь. Я не знаю, почему я не думал об этом. :) Вы можете задайте свойства для пользовательских элементов управления. Было бы неплохо иметь возможность динамически получать от них значения. –

+7

Bruce, свойства, переданные в пользовательский контроль, хранятся в карте свойств. До тех пор, пока у CC есть идентификатор, вы должны иметь доступ к любому переданному ему свойству: getComponent ("customControlId"). GetPropertyMap(). Get ("propertyName") –

+5

Если значение toString свойства назад, как ссылка на ValueBindingImpl (например, [email protected]), это означает, что свойство определяется динамически, поэтому вам нужно немного более сложное выражение для получения значения: getComponent ("customControlId"). getPropertyMap(). get ("propertyName"). getValue (facesContext) –

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