2016-04-25 3 views
-2
<p:dataTable value=”#{myBean.myList}” var=”item”> 
     <h:outputText id=”mytext” value=”#{item.valueText}”/> 
</p:dataTable> 

//Item class 

Class Item 
{ 
    String valueText; 
    Item(String valueText) 
    { 
      this.valueText = valueText; 
    } 
} 

//myList has 5 elements. 

Item(“red”); 
Item(“orange”); 
Item(“yellow”); 
Item(“green”); 
Item(“blue”);` 

//Button 
<p:commandButton value=’submit’ actionListener=”#{myBean.checkColor}” update=”myText”/>` // This will update all the five texts. 

//MyBean Class 

Class MyBean 
{ 
    List<Item> myList; 
    public void checkColor() 
    { 
      Iterator itr = myList.iterator();  
      while(itr.hasNext()) 
      { 
         Item item = itr.getNext(); 
         if(item.getValueText().contains(‘r’)) 
         { 
           item.setValueText(“Invalid Color”); 
         } 
      } 
     } 
} 

Приведенный выше код будет выполнять обновление по всем 5 текстам нажатием кнопки, хотя он изменит текст только на тексты, содержащие букву «r», поэтому остальные два обновления просто отходы. Но я хочу обновить только тексты с буквой «r» в них «Недопустимый цвет». Как я могу это сделать?Динамически/выборочно обновлять элементы по нажатию кнопки

+0

Ваш Java код не может скомпилировать. – Unknown

+0

@ Не знаю, что возможно, я просто пытаюсь объяснить проблему здесь. – nikhilsuri

ответ

0

Вы можете попробовать обновить свой компонент из bean-компонента по методу myBean.checkColor. Для этого необходимо использовать следующую структуру:

RequestContext.getCurrentInstance().update("updatable_component_id");

В коде это должно выглядеть следующим образом:

class MyBean { 
    private List<Item> myList; 

    public void checkColor() { 
     Iterator itr = myList.iterator(); 

     While(itr.hasNext()) { 
      Item item = itr.getNext(); 
      If(item.getValueText().contains("r")) { 
       Item.setValueText("Invalid Color"); 
       RequestContext.getCurrentInstance().update("updatable_component_id"); 
      } 
     } 
    } 
} 

about update from bean

+0

, но как я узнаю значение «updatable_component_id», поскольку идентификаторы динамически генерируются. – nikhilsuri

+0

вы используете 'inputText' id (mytext) в' 'вы можете использовать его в bean-компоненте. Также вы можете установить свойство 'id' для' dataTable', после чего идентификатор для таблицы не будет генерироваться. Затем вы можете написать «table_id: input_text_id». – HAYMbl4

+0

Но таким образом будут обновлены все компоненты с id (myText). поэтому это означает, что все пять текстов будут обновлены, но я хочу обновить только 3 цвета, которые содержат букву «r». Текст «Желтый» и «Синий» также будет присвоен id (myText), но я не хочу его обновлять. – nikhilsuri

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