XPages создает ссылки из массива в вычисляемом поле

Я поместил вычисленное поле в XPages, а затем создал значение с помощью этого кода ниже. Каждая строка имеет свою собственную ссылку, но прежде чем я закончу этот код, я пытаюсь научиться удалять запятую в начале строки. Должен быть другой способ сделать это. Должен ли я использовать один из других элементов дизайна, например контроль повтора?

<xp:text escape="false" id="computedField1" style="font-size:8pt">
  <xp:this.value>
  <![CDATA[#{javascript:{ var links = ["A1","A2","A3","","A444",""];
for (i=0;i<arr1.length;i++) {
    var strText = arr1[i];
    if (strText=="") {
      strText = "There is no value";
    }
    links[i] =  "<a href="+ arr1[i] + "target=\"_blank\">"+strText+"</a><br>";
  }
  return links;}]]></xp:this.value>
</xp:text>


Как убрать запятую в массиве

Любое предложение приветствуется,
Cumhur Ata


person Cumhur Ata    schedule 26.02.2016    source источник
comment
У вас есть дополнительный набор {}. Это ошибка копирования/вставки?   -  person Per Henrik Lausten    schedule 26.02.2016
comment
Я бы настоятельно рекомендовал использовать для этого элемент управления повторением, а не вычисляемое поле, выполняющее цикл SSJS для построения строки HTML. Его будет легче читать, легче избегать ошибок кодирования, легче устранять неполадки, легче поддерживать и легче расширять.   -  person Paul Stephen Withers    schedule 26.02.2016
comment
Это ошибка копирования/вставки, извините :(   -  person Cumhur Ata    schedule 29.02.2016


Ответы (2)


Кумхур, как указал Пол, повторяющийся цикл лучше всего подходит для такой цели.

В этом конкретном случае вы возвращаете массив как значение. Включение массива в строку решит вашу проблему.

return @Implode(links,"\n");

Кроме того, вместо того, чтобы добавлять <br> к каждому элементу, вы можете использовать его в качестве разделителя.

return @Implode(links,"<br/>");
person Serdar Basegmez    schedule 26.02.2016

Я бы порекомендовал вам использовать Repeat Control. Если вы это сделаете, чтобы получить желаемые результаты, это может выглядеть примерно так:

<xp:repeat id="repeat1" rows="30" var="rowData">
    <xp:this.value><![CDATA[#{javascript:var links = ["A1","A2","A3","","A444",""]
return links;}]]></xp:this.value>
    <xp:link escape="true" value="#{rowData}" id="link1" target="_blank">
    <xp:this.text><![CDATA[#{javascript:var temp:string = rowData;
if (temp.length == 0) {
    return "There is no value";
} else {
    return rowData;
}}]]></xp:this.text>
    </xp:link>
    <br/>
</xp:repeat>
person David Leedy    schedule 26.02.2016
comment
Спасибо, Эриканд и Дэвид. Я изменю код и буду использовать Repeat Control, как вы упомянули. - person Cumhur Ata; 29.02.2016