2016-02-15 4 views
2

В окне списка (например, в поле списка A) содержатся значения, и если я нажму кнопку (например, кнопку X), она добавит выбранное значение в другой список (например, в поле списка B) , После этого действия в окне списка B будет отображаться значение выбора.Переменная с областью видимости в поле списка

В список коробки B (предположим, он имеет значения из блока списка А), если нажать на другую кнопку (например, кнопку Y), выбранное значение из блока списка B возвращает в список ящик

я следую ответ из этого post и попробуйте применить код к списку.

Когда я запустил его, я могу добавить значение (только одно значение) из поля списка A. Но я не могу переместить значение из поля списка B в поле списка A. Я думаю, причина может быть связана с другой областью переменной: list box. Использовать переменную области видимости вида и поле списка B использовать переменную области сеанса.

Я ищу различные сообщения в stackoverflow об изменении переменной области обмена в окне списка, но у меня все еще нет этой идеи.

Я размещаю код, потому что это полезно. Спасибо за вашу помощь.

<xp:table style="width:500.0px"><xp:tr><xp:td>B&#160;list box&#160;</xp:td> 
     <xp:td></xp:td> 
     <xp:td>A list box </xp:td> 
    </xp:tr> 
    <xp:tr> 
     <xp:td> 

     <xp:listBox id="listBox5" value="#{sessionScope.BLstBoxItem}" style="width:100.0px"> 
       <xp:selectItems> 
        <xp:this.value><![CDATA[#{javascript:if (!viewScope.selectItems) 
{ 
    viewScope.selectItems = ["a","c","g"]; 
} 
return viewScope.selectItems;}]]></xp:this.value> 
       </xp:selectItems> 
      </xp:listBox></xp:td> 
     <xp:td> 
      <xp:button id="button4" style="width:250.0px"> 
       <xp:this.value><![CDATA[<------ Values move to B list box]]> </xp:this.value> 
       <xp:eventHandler event="onclick" submit="true" 
        refreshMode="complete"> 
        <xp:this.action><![CDATA[#{javascript: 
     viewScope.selectItems.add(viewScope.ALstBoxItem); 
     viewScope.ALstBoxItem = ""; 
     /* 
     for(var i in ALstBoxItem){ 
      i-- 
     } 
     return ALstBoxItem; 

     */}]]></xp:this.action> 
       </xp:eventHandler> 
      </xp:button> 
      <xp:br></xp:br> 
      <xp:br></xp:br> 
      <xp:button id="button2" style="width:250.0px"> 
       <xp:this.value><![CDATA[Values move to A list box ------>]]></xp:this.value> 
       <xp:eventHandler event="onclick" submit="true" 
        refreshMode="complete"> 
        <xp:this.action><![CDATA[#{javascript: 
     sessionScope.selectItems.add(sessionScope.BLstBoxItem); 
     sessionScope.BLstBoxItem = ""; 
     /* 
     for(var i in LLstBoxItem){ 
      i-- 
     } 
     return BLstBoxItem; 

     */}]]></xp:this.action> 
       </xp:eventHandler> 
      </xp:button> 
     </xp:td> 
     <xp:td> 
      <xp:listBox id="listBox4" 
       value="#{viewScope.ALstBoxItem}" style="width:100.0px"> 
       <xp:selectItem itemLabel="a"></xp:selectItem> 
       <xp:selectItem itemLabel="b"></xp:selectItem> 
       <xp:selectItem itemLabel="c"></xp:selectItem> 
       <xp:selectItem itemLabel="d"></xp:selectItem> 
       <xp:selectItem itemLabel="e"></xp:selectItem> 
       <xp:selectItem itemLabel="f"></xp:selectItem> 
       <xp:selectItem itemLabel="g"></xp:selectItem> 
       <xp:selectItem itemLabel="h"></xp:selectItem> 
       <xp:selectItem itemLabel="i"></xp:selectItem> 
       <xp:selectItem itemLabel="j"></xp:selectItem> 
      </xp:listBox> 
     </xp:td> 
    </xp:tr> 
</xp:table> 

ответ

2

Использование зрения сферы переменных только, как вы хотите, чтобы манипулировать значения только в текущем XPage и не хотите, чтобы установить значение в разных вкладках браузера или XPages.

С помощью щелчка на кнопке вы хотите добавить выбранное значение из первого списка, чтобы выбрать список избранного во второй список и удалить его из первого списка. После добавления значения полезно отсортировать список.

Этого код делает то, что вы ищете:

<xp:table 
    style="width:500.0px"> 
    <xp:tr> 
     <xp:td>B list box</xp:td> 
     <xp:td></xp:td> 
     <xp:td>A list box</xp:td> 
    </xp:tr> 
    <xp:tr> 
     <xp:td> 
      <xp:listBox 
       id="listBox5" 
       value="#{viewScope.BLstBoxItem}" 
       style="width:100.0px" 
       multiple="true"> 
       <xp:selectItems> 
        <xp:this.value><![CDATA[#{javascript: 
         if (!viewScope.BselectItems) { 
          viewScope.BselectItems = ["a","b","c"]; 
         } 
         return viewScope.BselectItems; 
        }]]></xp:this.value> 
       </xp:selectItems> 
      </xp:listBox> 
     </xp:td> 
     <xp:td> 
      <xp:button 
       id="button4" 
       style="width:250.0px"> 
       <xp:this.value><![CDATA[<------ Values move to B list box]]> 
       </xp:this.value> 
       <xp:eventHandler 
        event="onclick" 
        submit="true" 
        refreshMode="complete"> 
        <xp:this.action><![CDATA[#{javascript: 
         if (viewScope.ALstBoxItem) { 
          var sel = [].concat(viewScope.ALstBoxItem); 
          for (var i = 0; i < sel.length; i++) { 
           viewScope.BselectItems.add(sel[i]); 
           viewScope.AselectItems.remove(sel[i]); 
          } 
          viewScope.BselectItems.sort(); 
          viewScope.ALstBoxItem = ""; 
         } 
        }]]></xp:this.action> 
       </xp:eventHandler> 
      </xp:button> 
      <xp:br></xp:br> 
      <xp:br></xp:br> 
      <xp:button 
       id="button2" 
       style="width:250.0px"> 
       <xp:this.value><![CDATA[Values move to A list box ------>]]> 
       </xp:this.value> 
       <xp:eventHandler 
        event="onclick" 
        submit="true" 
        refreshMode="complete"> 
        <xp:this.action><![CDATA[#{javascript: 
         if (viewScope.BLstBoxItem) { 
          var sel = [].concat(viewScope.BLstBoxItem); 
          for (var i = 0; i < sel.length; i++) { 
           viewScope.AselectItems.add(sel[i]); 
           viewScope.BselectItems.remove(sel[i]); 
          } 
          viewScope.AselectItems.sort(); 
          viewScope.BLstBoxItem = ""; 
         } 
        }]]></xp:this.action> 
       </xp:eventHandler> 
      </xp:button> 
     </xp:td> 
     <xp:td> 
      <xp:listBox 
       id="listBox4" 
       value="#{viewScope.ALstBoxItem}" 
       style="width:100.0px" 
       multiple="true"> 
       <xp:selectItems> 
        <xp:this.value><![CDATA[#{javascript: 
         if (!viewScope.AselectItems) { 
          viewScope.AselectItems = ["d","e","f","g","h","i"]; 
         } 
         return viewScope.AselectItems; 
        }]]></xp:this.value> 
       </xp:selectItems> 
      </xp:listBox> 
     </xp:td> 
    </xp:tr> 
</xp:table> 

Обновления: код работает с множественным выбором и сейчас.

+0

Большое спасибо за ваш ответ. Когда я все еще смотрю на этот [сайт] (http://www.xpagedomino.com/2015/02/xpages-scoped-variables.html), ваш ответ решает мою проблему. Большое спасибо. – Learner

+0

Я иногда путаюсь между переменной области сеанса и переменной области видимости, после того как я прочитал этот ответ, это делает мою концепцию понятной. – Learner

+0

Я больше разбираюсь в окне списка, я обнаружил, что есть опция, позволяющая использовать несколько вариантов, когда я включаю опцию для двух списков и запускаю код. Программа не позволяет мне переместить несколько значений и дать мне это исключение: java.util.ArrayList несовместим с javax.faces.model.SelectItem – Learner

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