XPages - Проблема с привязкой данных - PullRequest
0 голосов
/ 30 октября 2018

У меня проблемы с вычислением имени поля привязки данных. Я не получаю никаких ошибок, однако переключатель находится в состоянии «отключено». Когда я помещаю простую привязку данных в то, что, как я знаю, работает, радио теряет свое состояние «отключено» и работает как положено, но, очевидно, не сохраняет в нужное имя поля. Конечной целью является создание имени поля на основе комбинации двух пользовательских свойств. Я пробовал разные вещи, некоторые из которых показаны ниже:

1.    compositeData.dataSource[compositeData.fieldName #compositeData.radio1LabelText]

    2. compositeData.dataSource[compositeData.fieldName+compositeData.radio1LabelText]

    3. compositeData.dataSource[compositeData.fieldName,compositeData.radio1LabelText]

    4. try{
        var fieldName:string=compositeData.fieldName;
        var fieldLabel:string=compositeData.radio1LabelText;
        return compositeData.dataSource+"."+fieldName+fieldLabel;   
    }catch(e){
        openLogBean.addError(e,this.getParent());
    }

5. compositeData.dataSource[compositeData.fieldName += compositeData.radio1LabelText]

6.compositeData.dataSource[compositeData.fieldName.concat(compositeData.radio1LabelText)] 

Спасибо

ОБНОВЛЕНИЕ в комментариях чата с Джесси:

    <xp:repeat id="repeat1" rows="30"
                        value="#{javascript:compositeData.labels}" var="rptLabels">
                        <tr>
<td>
<xp:panel>
<xp:this.dataContexts>
        <xp:dataContext var="concatRadioName1">
            <xp:this.value><![CDATA[#{javascript:var tmpString = "GIMS"+rptLabels+"Self";
var fieldName = tmpString.replace(/\s+/g, '');
print(fieldName);
return fieldName
}]]></xp:this.value>
        </xp:dataContext>
</xp:this.dataContexts>
                        <xp:radioGroup styleClass="no-margin">


                            <xp:this.value><![CDATA[#{compositeData.dataSource[concatRadioName1]}]]></xp:this.value>

                            <xp:selectItem itemValue="1" itemLabel=""></xp:selectItem>
                            <xp:selectItem itemValue="2" itemLabel=""></xp:selectItem>
                            <xp:selectItem itemValue="3" itemLabel=""></xp:selectItem>
                        </xp:radioGroup>
</xp:panel>

</td>

            </tr>
                    </xp:repeat>

1 Ответ

0 голосов
/ 30 октября 2018

По какой-то причине у EL в XPages нет оператора конкатенации строк, что усложняет задачу. Вдобавок ко всему, я могу вспомнить два возможных маршрута, которые могли бы работать:

  • Внутри пользовательского элемента управления у вас может быть dataContext, который объединяет два свойства, например <xp:dataContext var="concatFieldName" value="#{compositeData.fieldName}#{compositeData.radio1LabelText}"/>. Затем вы можете использовать #{compositeData.dataSource[concatFieldName]} позже на странице.
  • Если значения либо жестко заданы на вызывающей странице, либо могут быть вычислены с использованием привязки $ {}, вы можете использовать SSJS для генерации привязки, аналогично тому, что вы пытались в # 4. Вы можете поместить вычисление SSJS в привязку $ {}, а затем получить вывод в виде строковой версии привязки # {} для объединенной строки. Когда вы выполняете такую ​​цепочку, среда выполнения в конечном итоге разрешает правильное внутреннее связывание среды выполнения.
...